根据另一个位置的目录列表从一个位置删除一堆目录?

时间:2012-07-03 20:39:09

标签: linux shell command-line

我在文件系统的两个完全不同的位置有两个目录: /路径1 / DIR1 / * / PATH2 / DIR2 / *

dir1有一个子目录列表,dir2有一个类似的子目录列表,其中一些也在dir1中

我想要一个可以使用当前在dir1中的子目录列表的命令,如果它们存在于dir2中,则删除它们。

我能够使用find命令输出子目录名称列表,并像这样一起sed:

找到$ PWD -maxdepth 1-type d | sed -e的\ ^ / path1 / dir1 /// g'然后输出: subdir1 subdir2 subdir3

但我不知道如何将其提供给命令以从另一个位置删除(递归)这些子目录。我需要使用awk或xargs吗?

3 个答案:

答案 0 :(得分:2)

听起来你想要这样的东西:

cd /path1/dir1; find . -type d -maxdepth 1 -mindepth 1 -exec rm -rf /path2/dir2/{} \;

将“rm -rf”替换为“echo”以查看在尝试之前将删除的目录: - )

如果目录不存在,“ - f”选项可防止错误

某些版本的find(GNU?)也有“-execdir”。您可以像这样使用它:

find /path1/dir -type d -maxdepth 1 -mindepth 1 -execdir rm -rf /path2/dir2/{} \;

答案 1 :(得分:0)

for dir in path1/dir1/*/
do
    rm -rf path2/dir2/"$(basename dir)"
done

答案 2 :(得分:0)

您也可以尝试使用find找到dirs和管道到awk:

find /path1/dir1/ -maxdepth 1 -mindepth 1 -type d |awk 'BEGIN{FS="/"}{system("echo rm -rf /path2/dir2/"$NF);}'

当您确定命令行为正常时,删除system()调用中的“echo”。