find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
【1】find -not -empty -type f -printf “%s\n” :find是查找命令;-not -empty是要尋找非空文件;-type f是指尋找常規文件;-printf “%s\n”表示的是文件的大小,單位為bytes
【2】sort -rn:這條命令就是按文件大小進行反向排序
【3】uniq -d:uniq是把重復的只輸出一次,而-d指只輸出重復的部分(如9出現了5次,那么就輸出1個9,而2只出現了1次,並非重復出現的數字,故不輸出)
【4】xargs -I{} -n1 find -type f -size {}c -print0:這一部分分兩部分看,第一部分是xargs -I{} -n1,xargs命令將之前的結果轉化為參數,供后面的find調用,其中-I{}是指把參數寫成{},而-n1是指將之前的結果一個一個輸入給下一個命令(-n8就是8個8個輸入給下一句,不寫-n就是把之前的結果一股腦的給下一句)。后半部分是find -type f -size {}c -print0,find指令我們前面見過,-size{}是指找出大小為{}bytes的文件,而-print0則是為了防止文件名里帶空格而寫的參數。
【5】
xargs -0 md5sum:xargs是將前面的結果轉化為輸入,那么這個-0表示讀取參數的時候以null為分隔符讀取,這也不難理解,畢竟null的二進制表示就是00。后面的md5sum是指計算輸入的md5值。
【6】uniq -w32 –all-repeated=separate 最后這里表示對MD5的前32個字節進行對比,以篩選出重復文件