Scripting

如何將多個文件重命名為其內容的 MD5 總和?

  • April 6, 2021

我想將一些文件重命名為其內容的 MD5 總和;例如,如果文件foo為空,則應將其重命名為d41d8cd98f00b204e9800998ecf8427e.

它必須是腳本還是我可以使用類似rename工具的東西?

格倫的回答很好;這是對多個文件的改進:

md5sum file1 file2 file3 | # or *.txt, or whatever
   while read -r sum filename; do
       mv -v "$filename" "$sum"
   done

如果您正在生成具有find或類似內容的文件,則可以將md5sum呼叫替換為類似find . <options> -print0 | xargs -0 md5sum的內容(輸出也通過管道傳輸到 shell 循環中)。

這是獲取 的輸出md5sum,它由多行和一個總和然後是它對應的文件組成,並將其通過管道傳輸到一個 shell 循環中,該循環讀取每一行並發出一個mv命令,將文件從原始名稱重命名為總和。任何具有相同總和的文件都將被覆蓋;但是,除非出現異常情況(例如,如果您正在玩 md5 雜湊衝突),這將意味著它們具有相同的內容,因此您無論如何都不會失去任何數據。如果需要對每個文件引入其他操作,可以將它們放入循環中,分別引用變數$filename$sum,其中分別包含原始文件名和 MD5 和。

引用自:https://unix.stackexchange.com/questions/230389