【发布时间】:2021-04-01 13:48:06
【问题描述】:
我犯了一个错误并创建了嵌套目录,例如:
dir1/dir2_A/out/dir2_A
file1
file2
out
dir1/dir2_B/out/dir2_B
file1
file2
out
dir1/dir2_C/out/dir2_C
file1
file2
out
...
如何删除所有中间目录:
dir1/dir2_A/out/dir2_A/ → dir1/dir2_A/
dir1/dir2_B/out/dir2_B/ → dir1/dir2_B/
dir1/dir2_C/out/dir2_C/ → dir1/dir2_C/
等等,在dir1得到这个?
dir1/dir2_A
file1
file2
out
dir1/dir2_B
file1
file2
out
dir1/dir2_C
file1
file2
out
【问题讨论】:
-
你想要的是
rm -rf dir1/dir2_*/out吗? -
此举将删除目录内的文件
-
您的意思是“移动文件,使它们不在
out子目录中,而是在包含out子目录的目录中”?使用“删除”会发送错误消息。 -
你说得对,我可以将目录移动到
dir1 -
如果你有基于 Perl 的
rename(偶尔prename)脚本/程序,你可以使用rename 's%/out/%/%' dir1/*/out/*命令来移动文件。如果做不到这一点,您将进入循环文件:for file in dir1/*/out/*; do newdir=$(dirname $(dirname "$file")); mv "$file" "$newdir"; done。你可以想出一些关于该主题的变体,这些变体会减少mv的运行频率。
标签: linux bash shell directory