Bash
如何使用 bash 刪除重複文件
我有一個包含重複文件(在 Mac 上由
md5sum
(md5
在 Mac 上))文件的文件夾,我希望安排一個cron作業來刪除任何找到的文件。但是,我堅持如何做到這一點。到目前為止我所擁有的:
md5 -r * | sort
輸出如下:
04c5d52b7acdfbecd5f3bdd8a39bf8fb gordondam_en-au11915031300_1366x768.jpg 1e88c6899920d2c192897c886e764fc2 fortbourtange_zh-cn9788197909_1366x768.jpg 266ea304b15bf4a5650f95cf385b16de nebraskasupercell_fr-fr11286079811_1366x768.jpg 324735b755c40d332213899fa545c463 grossescheidegg_en-us10868142387_1366x768.jpg 3993028fcea692328e097de50b26f540 Soyuz Spacecraft Rolled Out For Launch of One Year Crew.png 677bcd6006a305f4601bfb27699403b0 lechaustria_zh-cn7190263094_1366x768.jpg 80d03451b88ec29bff7d48f292a25ce6 ontariosunrise_en-ca10284703762_1366x768.jpg b6d9d24531bc62d2a26244d24624c4b1 manateeday_row10617199289_1366x768.jpg ca1486dbdb31ef6af83e5a40809ec561 Grueling Coursework.jpg cdf26393577ac2a61b6ce85d22daed24 Star trails over Mauna Kea.jpg dc3ad6658d8f8155c74054991910f39c smoocave_en-au10358472670_1366x768.jpg dc3ad6658d8f8155c74054991910f39c smoocave_en-au10358472670_1366x7682.jpg
如何根據文件的 MD5 進行處理以去除重複項?我真的不在乎我保留哪個“原件”——但我只想保留一個。
我應該以不同的方式解決這個問題嗎?
我在 Linux 上工作,這意味著
md5sum
輸出的命令是:> md5sum * d41d8cd98f00b204e9800998ecf8427e file_1 d41d8cd98f00b204e9800998ecf8427e file_10 d41d8cd98f00b204e9800998ecf8427e file_2 d41d8cd98f00b204e9800998ecf8427e file_3 d41d8cd98f00b204e9800998ecf8427e file_4 d41d8cd98f00b204e9800998ecf8427e file_5 d41d8cd98f00b204e9800998ecf8427e file_6 d41d8cd98f00b204e9800998ecf8427e file_7 d41d8cd98f00b204e9800998ecf8427e file_8 d41d8cd98f00b204e9800998ecf8427e file_9 b026324c6904b2a9cb4b88d6d61c81d1 other_file_1 31d30eea8d0968d6458e0ad0027c9f80 other_file_10 26ab0db90d72e28ad0ba1e22ee510510 other_file_2 6d7fce9fee471194aa8b5b6e47267f03 other_file_3 48a24b70a0b376535542b996af517398 other_file_4 1dcca23355272056f04fe8bf20edfce0 other_file_5 9ae0ea9e3c9c6e1b9b6252c8395efdc1 other_file_6 84bc3da1b3e33a18e8d5e1bdd7a18d7a other_file_7 c30f7472766d25af1dc80b3ffc9a58c7 other_file_8 7c5aba41f53293b712fd86d08ed5b36e other_file_9
現在使用
awk
和xargs
命令將是:md5sum * | \ sort | \ awk 'BEGIN{lasthash = ""} $1 == lasthash {print $2} {lasthash = $1}' | \ xargs rm
該部分使用不會匹配任何雜湊的空字元串進行
awk
初始化,然後檢查每一行的雜湊是否與目前文件(第二列)的雜湊(第一列)相同。如果是,它會列印出來。在每一步結束時,它將設置為目前文件的雜湊值(您可以將其限制為僅在雜湊值不同時才設置,但這應該是一件小事,尤其是在您沒有很多匹配文件的情況下)。awk 吐出的文件名被饋送到with ,它基本上呼叫了該部分給我們的內容。lasthash``lasthash``lasthash``rm``xargs``rm``awk
您可能需要先過濾目錄
md5sum *
。編輯:
使用 Marcins 方法,您也可以使用以下方法:
comm -1 -2 \ <(ls) | \ <(md5sum * | \ sort -k1 | \ uniq -w 32 | \ awk '{print $2}' | \ sort) \ xargs rm
這從文件列表
ls
中減去由md5sum * | sort -k1 | uniq -w 32 | awk '{print $2}'
.