Scripting
如何將多個文件重命名為其內容的 MD5 總和?
我想將一些文件重命名為其內容的 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 和。