今天遇到了一个问题,在同步百度云网盘的照片时,出现了混乱。我在本地删了很多照片,同时也给已存的照片改了名,按理说同步程序会把本地结果同步到云端。但是不知道怎么回事,程序又把云端的照片下载到本地了。这就使得目录下有了很多不同名的重复文件。而且数量很多,大概两千多张照片,这种情况下手动排除重复照片是很麻烦的一件事。想到自己的windows上装了CGWIN
,所以尝试写了一个Shell命令来解决问题。没想到还成功了。
命令如下:
1 | $ find -not -empty -type f -printf "%s\n" |sort -rn|uniq -d|xargs -I{} -n1 find -type f -size {}c -print > repeat.txt |
这里一个个讲解下:
find -not -empty -type f -printf "%s\n"
是用find
命令找出不为空的,类型为文件,将这些文件的大小按行打印出来。-printf
是find
命令的格式化选项,都过这个选项可以打印出各种想要的东西。其中%s
就是打印文件的大小.可以通过man find
去查看详细内容。
- 打印出所有文件的大小后,根据文件大小的数值进行降序排列后,然后使用
uniq -d
筛选出重复的文件大小数据。 xargs -I{} -n1 find -type f -size {}c -print
是反向打印出文件名。我们通过前面的命令能够知道重复的文件大小数值。通过此命令可以通过文件大小的值,把重复的文件名筛选出来。-size {}c
后面的c
指的是按bytes
单位。
cat repeat.txt|awk '{if(NR%2==0) print}'|xargs -I{} mv {} REPEAT
。将重复的文件名放入到一个文本中。通过筛选文本中的偶数行,就可以获取出那些重复的文件名,然后将其移动到新的文件夹中。
参考链接: