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

Linux 根据另一个位置的目录列表,从一个位置删除一组目录?,linux,shell,command-line,Linux,Shell,Command Line,我在文件系统中有两个完全不同的目录: /路径1/dir1/* /路径2/dir2/* dir1有一个子目录列表,dir2有一个类似的子目录列表,其中一些也在dir1中 我想要一个命令,可以使用当前在dir1中的子目录列表,如果它们存在于dir2中,则删除它们 我能够使用find命令输出子目录名的列表,并按如下方式一起使用: cd /path1/dir1; find . -type d -maxdepth 1 -mindepth 1 -exec rm -rf /path2/dir2/{} \;

我在文件系统中有两个完全不同的目录: /路径1/dir1/* /路径2/dir2/*

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

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

我能够使用find命令输出子目录名的列表,并按如下方式一起使用:

cd /path1/dir1; find . -type d -maxdepth 1 -mindepth 1 -exec rm -rf /path2/dir2/{} \;
find /path1/dir -type d -maxdepth 1 -mindepth 1 -execdir rm -rf /path2/dir2/{} \;
找到$PWD-maxdepth 1-typed | sed-e的\^/path1/dir1///g',它将输出: 次曲面1 次曲面2 细分3


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

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

cd /path1/dir1; find . -type d -maxdepth 1 -mindepth 1 -exec rm -rf /path2/dir2/{} \;
find /path1/dir -type d -maxdepth 1 -mindepth 1 -execdir rm -rf /path2/dir2/{} \;
将“rm-rf”替换为“echo”,以查看在尝试之前将删除哪些目录:-)

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

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

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

您也可以尝试使用“查找”来定位指向awk的目录和管道:

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

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

您的
find
解决方案非常优雅,避免了使用慢速shell,但它的问题在于POSIX规范中的以下内容:
如果实用工具名称或参数字符串包含两个字符“{}”,但不仅仅是两个字符“{}”,而是由实现定义find是否替换这两个字符或使用字符串而不进行更改