Linux 根据另一个位置的目录列表,从一个位置删除一组目录?
我在文件系统中有两个完全不同的目录: /路径1/dir1/* /路径2/dir2/* dir1有一个子目录列表,dir2有一个类似的子目录列表,其中一些也在dir1中 我想要一个命令,可以使用当前在dir1中的子目录列表,如果它们存在于dir2中,则删除它们 我能够使用find命令输出子目录名的列表,并按如下方式一起使用: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/{} \;
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是否替换这两个字符或使用字符串而不进行更改代码>