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

我有两个名为thumb和thumb2的目录。 它们包含相同的文件名,但大小不同。 不幸的是,有一些thumb2文件不是拇指,需要删除。

$ ls ../thumb2 | wc -l 199030 $ ls ../thumb | wc -l 193455 

我正在寻找一个命令行命令,它将删除thumb2中的所有文件,这些文件也不是拇指。

有没有人有一个想法如何做到这一点?

我已经用一个小样本testing了这个解决scheme,但在尝试之前一定要备份你的目录:

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

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

更新

这是Glenn优秀解决scheme的修改版:

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

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

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

删除echo如果你满意,它的工作。