0

我在文件系统中完全不同的地方有两个目录: /path1/dir1/* /path2/dir2/*

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

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

我能够使用 find 命令和 sed 一起输出子目录名称列表,如下所示:

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

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

4

3 回答 3

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/{} \;
于 2012-07-03T20:46:55.447 回答
0

您也可以尝试使用 find 来定位到 awk 的目录和管道:

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

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

于 2012-07-05T02:03:43.790 回答
0
for dir in path1/dir1/*/
do
    rm -rf path2/dir2/"$(basename dir)"
done
于 2012-07-04T00:23:20.467 回答