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

mer*_*lin 1 shell

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

$ ls ../thumb2 | wc -l
199030

$ ls ../thumb | wc -l
193455
Run Code Online (Sandbox Code Playgroud)

我正在搜索一个命令行命令,该命令将从拇指 2 中删除所有不在拇指中的文件。

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

Hai*_* Vu 5

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

cd ../thumb2
for f in *; do test -e ../thumb/$f || echo rm $f; done
Run Code Online (Sandbox Code Playgroud)

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

更新

这是格伦优秀解决方案的修改版本:

diff thumb thumb2 | \
while read field1 field2 dir filename; do 
    [[ $dir = "thumb2:" ]] && echo rm "thumb2/$filename"
done
Run Code Online (Sandbox Code Playgroud)