将文件移回 2 个目录

Chi*_*tty 5 linux bash shell-script mv

$ cat file
/tmp/foldera/folderb/folderc/file1
/tmp/folderc/folderd/foldere/file2
/tmp/folderf/folderg/folderh/file3
Run Code Online (Sandbox Code Playgroud)

需要将此文件移动到

/tmp/foldera/
/tmp/folderc/
/tmp/folderf/
Run Code Online (Sandbox Code Playgroud)

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

cha*_*aos 10

使用while循环:

while IFS= read -r l; do
  mv -v -- "$l" "${l%/*/*/*}/"
done <file
Run Code Online (Sandbox Code Playgroud)
  • 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“
Run Code Online (Sandbox Code Playgroud)


Cen*_*ane 6

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

while IFS= read -r l; do
    mv -- "$l" "$(dirname -- "$(dirname -- "$l")")"
done <file
Run Code Online (Sandbox Code Playgroud)

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

/tmp/foldera/folderb/folderc/folderd/
Run Code Online (Sandbox Code Playgroud)