删除不在另一个文件夹中的文件

删除不在另一个文件夹中的文件

我有两个目录,分别称为 thumb 和 thumb2。它们包含相同的文件名,但大小不同。不幸的是,thumb2 中的一些文件不在 thumb 中,需要将其删除。

$ ls ../thumb2 | wc -l
199030

$ ls ../thumb | wc -l
193455

我正在寻找一个命令行命令,它将从 thumb2 中删除所有不在 thumb 中的文件。

有人知道如何做到这一点吗?

答案1

我已经用小样本测试了这个解决方案,但在尝试之前请务必备份您的目录:

cd ../thumb2
for f in *; do test -e ../thumb/$f || echo rm $f; done

我没有包含数千个文件的目录,所以我不知道此命令是否适用于如此大的样本。请在备份目录后尝试一下。一旦您确定该命令正常工作,请删除该echo命令。

更新

以下是 Glenn 的优秀解决方案的修改版本:

diff thumb thumb2 | \
while read field1 field2 dir filename; do 
    [[ $dir = "thumb2:" ]] && echo rm "thumb2/$filename"
done

答案2

您还可以调用diff来检查目录内容:

diff thumb thumb2 |
while read line; do
  case "$line" in
    "Only in thumb2: "*) echo rm "thumb2/${line#*: }" ;;
  esac
done

echo如果您对它的运行满意,则可将其删除。

相关内容