在shell脚本中删除具有相同大小的重复文件

时间:2014-12-16 18:11:22

标签: shell duplicates

我有一个目录,其中有多个文件具有相同的内容但名称不同,我想要删除重复项的唯一标准是根据大小对它们进行排序,然后删除具有相同大小的文件,例如当我键入时

 find . -type f -printf "%p - %s\n" | uniq -D -f1 | sort -nr -k3

我得到了

   ./abc.txt - 595
   ./acd.txt - 595
   ./dbc.txt - 595
   ./jed.txt - 595
   ./end.txt - 595
   ./wtw.txt - 595
   ./hds.txt - 595
   ./dkd.txt - 523
   ./kjk.txt - 523

我只想保留

   ./abc.txt 
   ./dkd.txt

2 个答案:

答案 0 :(得分:1)

find . -type f -printf "%p - %s\n" | uniq -D -f1 | sort -nr -k3
  • uniq需要对输入进行排序,因此您必须将sort放在其前面。

  • 此处uniq选项-D不合适。

  • sort选项-u可以完成uniq的工作。

find . -type f -printf "%p - %s\n" | sort -nru -k3

答案 1 :(得分:0)

这是一种可以复制出一个副本版本的方法:

find . -type f -printf "%p - %s\n" | uniq -d -f1 | cut -d' ' -f1 | xargs -I{} cp {} /path/to/dir