Linux Bash命令删除多个嵌套目录
我犯了一个错误,创建了嵌套目录,例如:Linux Bash命令删除多个嵌套目录,linux,bash,shell,directory,Linux,Bash,Shell,Directory,我犯了一个错误,创建了嵌套目录,例如: 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
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
下降到文件,将所有内容向上移动。
接下来,删除空目录。 在子shell中使用括号,以便从d1返回,而不使用
cd../.
for d1 in dir1/*/*/*; do
test -d "$d1" || continue
(cd "$d1" && mv * ../.. )
done
# Cleanup without `rm -r` avoiding errors when something went wrong
rmdir dir1/*/out/*
rmdir dir1/*/out
下降到文件,将所有内容向上移动。
接下来,删除空目录。 在子shell中使用括号,以便从d1返回,而不使用
cd../.
for d1 in dir1/*/*/*; do
test -d "$d1" || continue
(cd "$d1" && mv * ../.. )
done
# Cleanup without `rm -r` avoiding errors when something went wrong
rmdir dir1/*/out/*
rmdir dir1/*/out
rm-rf dir1/dir2.*/out
是您想要的吗?此移动将删除目录中的文件。您的意思是“移动文件,使其不在out
子目录中,而是在包含out
子目录的目录中”?使用“remove”发送错误的消息。您是对的,我可以将目录移动到dir1
中。如果您有基于Perl的rename
(偶尔prename
)脚本/程序,您可以使用rename's%/out/%/dir1/*/out/*
命令移动文件。如果做不到这一点,您将在文件上循环:for file in dir1/*/out/*;do newdir=$(dirname$(dirname“$文件”);mv“$file”“$newdir”;完成
。您可以在该主题上提出一些变体,以减少运行mv
的次数。rm-rf dir1/dir2.*/out
是您想要的吗?此移动将删除目录中的文件,您的意思是“移动文件,使其不在out
子目录中,而是在包含out
子目录的目录中”?使用“remove”发送错误消息。您是对的,如果您有基于Perl的重命名
(偶尔prename
),我可以将目录移动到dir1
)脚本/程序,您可以使用重命名的%/out/%/%%dir1/*/out/*命令来移动文件。否则,您将在文件上循环:for file in dir1/*/out/*;do newdir=$(dirname$(dirname“$file”);mv“$file”“$newdir"; 完成
。您可以针对该主题提出一些变体,以减少运行mv
的频率。