Files

根據校驗和重命名文件

  • April 6, 2019

我有一個 md5sum 列表和很多我想校驗和然後根據 md5sum 列表重命名它們的文件。

列表範例:

d4cd401ade018617629b39efed7b7be4  foo.bar
8fdb07ca55c164e0d5a69eff49fe800e  bar.foo
8b167d01009f066aaf2d6c1ba336d842  foobar

現在我想對目前目錄中的每個文件進行校驗和,如果校驗和與上面的列表匹配,則將其重命名為正確的列。

我怎麼能這樣做?

我還沒有完全測試,它只是理論上的工作。在需要的地方替換:

#! /bin/bash
for II in *
do
   if [ -f "$II" ]; then
       TMPV=$(md5sum "$II")
       MD="${TMPV%\ \ *}"
       TMPV=$(grep "$MD" hashes.txt)
       if [ ! -z "$TMPV" ]; then
           FN="${TMPV#*\ \ }"
           echo "Found: $II"
           echo "MD5 is: $MD"
           echo "Which matches $FN in hashes database"
           echo "Will Rename $II TO $FN"
           echo ""
           # CAREFUL, RENAME CMD: mv "$II" "$FN"
       fi;
   fi;
done;

正如我所說,尚未對其進行測試,但它似乎適用於我的盒子。

首先,我不會聲稱這是最深刻的解決方案,但這是一種方法。

假設您有一個帶有校驗和和文件名的文件,filelist.txt那麼您可以使用以下內容:

while read -r checksum fname; do for f in file*; do if [[ $checksum == $(md5sum "$f" | cut -d' ' -f1) ]]; then mv "$f" "$fname"; fi ; done ; done < filelist.txt

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