我在文件系统的两个完全不同的位置有两个目录: /路径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吗?
答案 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”。