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 l将file逐行读取。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)
我会建议一个与混乱类似的答案,但使用 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)