将文件向后移动 2 个目录

将文件向后移动 2 个目录
$ cat file
/tmp/foldera/folderb/folderc/file1
/tmp/folderc/folderd/foldere/file2
/tmp/folderf/folderg/folderh/file3

需要将此文件移动到

/tmp/foldera/
/tmp/folderc/
/tmp/folderf/

分别使用循环或任何简单方便的方法来做到这一点。

答案1

使用 while 循环:

while IFS= read -r l; do
  mv -v -- "$l" "${l%/*/*/*}/"
done <file
  • while IFS= read -r lfile逐行阅读。
  • mv -v移动文件并-v告知mv详细信息
    • "$l"是源文件名
    • "${l%/*/*/*}/"是目标目录。它/*/*/*从文件名的后端删除 3 个斜杠以及斜杠之间的内容 ( )。

这将产生:

»/tmp/foldera/folderb/folderc/file1“ -> »/tmp/foldera/file1“
»/tmp/folderc/folderd/foldere/file2“ -> »/tmp/folderc/file2“
»/tmp/folderf/folderg/folderh/file3“ -> »/tmp/folderf/file3“

答案2

我会建议一个与混乱类似的答案,但使用dirname

while IFS= read -r l; do
    mv -- "$l" "$(dirname -- "$(dirname -- "$l")")"
done <file

dirname报告文件/目录所在目录的路径。这样做的优点是还能够处理目录的移动,以防您的文件具有如下条目:

/tmp/foldera/folderb/folderc/folderd/

相关内容