来自:http : //www.chriswrites.com/2012/02/how-to-find-and-delete-duplicate-files-in-mac-os-x/ 我如何修改这个只删除第一个版本它看到的文件。
从 Spotlight 或 Utilities 文件夹打开终端使用 cd 命令更改为要从中搜索(包括子文件夹)的目录(文件夹)。在命令提示符下键入 cd 例如 cd ~/Documents 将目录更改为您的主文档文件夹 在命令提示符下,键入以下命令:
find . -size 20 \! -type d -exec cksum {} \; | sort | tee /tmp/f.tmp | cut -f 1,2 -d ' ' | uniq -d | grep -hif – /tmp/f.tmp > duplicates.txt
Run Code Online (Sandbox Code Playgroud)
此方法使用简单的校验和来确定文件是否相同。重复项的名称将列在当前目录中名为duplicates.txt 的文件中。打开它以查看相同文件的名称 现在有多种方法可以删除重复项。要删除文本文件中的所有文件,请在命令提示符下键入:
while read file; do rm "$file"; done < duplicates.txt
Run Code Online (Sandbox Code Playgroud)
Lri*_*Lri 52
另一种选择是使用 fdupes:
brew install fdupes
fdupes -r .
Run Code Online (Sandbox Code Playgroud)
fdupes -r .在当前目录下递归查找重复文件。添加-d以删除重复项——系统会提示您保留哪些文件;如果改为添加-dN,fdupes 将始终保留第一个文件并删除其他文件。
小智 4
首先,您必须重新排序第一个命令行,以便保持 find 命令找到的文件的顺序:
\n\nfind . -size 20 ! -type d -exec cksum {} \\; | tee /tmp/f.tmp | cut -f 1,2 -d \xe2\x80\x98 \xe2\x80\x98 | sort | uniq -d | grep -hif \xe2\x80\x93 /tmp/f.tmp > duplicates.txt\nRun Code Online (Sandbox Code Playgroud)\n\n(注:出于测试目的,我使用了我的机器find . -type f -exec cksum {} \\;)
其次,打印除第一个副本之外的所有副本的一种方法是使用辅助文件,比如说/tmp/f2.tmp. 然后我们可以做类似的事情:
while read line; do\n checksum=$(echo "$line" | cut -f 1,2 -d\' \')\n file=$(echo "$line" | cut -f 3 -d\' \')\n\n if grep "$checksum" /tmp/f2.tmp > /dev/null; then\n # /tmp/f2.tmp already contains the checksum\n # print the file name\n # (printf is safer than echo, when for example "$file" starts with "-")\n printf %s\\\\n "$file"\n else\n echo "$checksum" >> /tmp/f2.tmp\n fi\ndone < duplicates.txt\nRun Code Online (Sandbox Code Playgroud)\n\n只需确保/tmp/f2.tmp在运行之前存在且为空,例如通过以下命令:
rm /tmp/f2.tmp\ntouch /tmp/f2.tmp\nRun Code Online (Sandbox Code Playgroud)\n\n希望这有帮助 =)
\n| 归档时间: |
|
| 查看次数: |
24348 次 |
| 最近记录: |