Linux shell 命令比较两个目录并删除重复项

Linux shell 命令比较两个目录并删除重复项

作为我正在开发的应用程序的一部分,我需要删除目录 A 中已经存在于目录 B 中的所有文件。我想到 rsync,但我无法阻止它将丢失的文件从源复制到目标。

我正在寻找的一个例子

IE

    /dir1/apple
    /dir1/orange
    /dir1/banana 

    /dir2/orange    

执行完该命令后,我会得到:

    /dir1/apple
    /dir1/banana 

    /dir2/orange  

答案1

循环遍历目录 2 中的每个文件,并尝试删除basename目录 1 中具有相同文件名的等效文件 ()。

for f in dir2/*; do echo rm -f -- dir1/"$(basename "$f")"; done

请注意,rm -f如果找不到文件,则不会出错。echo当您确定它会删除正确的内容时,请删除。

如果您只想调用rm现有文件,请测试它们是否dir1存在[[ -f … ]]

for f in dir2/*; do del=dir1/"$(basename "$f")"; [[ -f "$del" ]] && rm -- "$del"; done

相关内容