$ 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 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“
答案2
我会建议一个与混乱类似的答案,但使用dirname
while IFS= read -r l; do
mv -- "$l" "$(dirname -- "$(dirname -- "$l")")"
done <file
dirname
报告文件/目录所在目录的路径。这样做的优点是还能够处理目录的移动,以防您的文件具有如下条目:
/tmp/foldera/folderb/folderc/folderd/