Command-Line
將目錄中的所有文件重命名為其文件名的 md5 雜湊(不是內容)
我對 linux / 命令行非常陌生,需要加密 10K+ 文件的名稱(唯一名稱),以便它們與 mySQL 數據庫中的 MD5 加密名稱匹配。
我已經看到如何重命名文件目錄以及如何獲取文件的雜湊值(mdsum?),但我一直堅持如何獲取文件名的雜湊值,然後將該文件重命名為生成的雜湊值保留擴展即
mynicepicture.jpg > fba8255e8e9ce687522455f3e1561e53.jpg
似乎它應該是一個簡單的重命名或
mv
行,但我無法理解它。非常感謝您的見解
PS 我已經在幾個接近我正在尋找的範例中看到了 Perl 函式的使用,但不知道在哪裡/如何使用這些函式。
你沒有說你想使用哪個 shell,所以我只是假設Bash - 答案需要調整才能與其他 shell 一起使用。
for i in *; do sum=$(echo -n "$i"|md5sum); echo -- "$i" "${sum%% *}.${i##*.}"; done
腳本版本:
for i in *; do sum=$(echo -n "$i" | md5sum) echo -- "$i" "${sum%% *}.${i##*.}" done
這個簡單
for
的循環獲取目前目錄中的每個文件,計算其名稱的 md5 和並將其輸出。使用它來檢查功能,如果你想開始重命名替換第二echo
個mv
。解釋
echo -n "$i" | md5sum
– 計算包含文件副檔名 ( Piping ) 的完整文件名的 md5 總和,以將副檔名更改剝離為以下之一:echo -n "$i"
${i%%.*} sed 's/\..*//' <<< "$i" echo "$i" | sed 's/\..*//'
sum=$(…)
– 執行…
並保存輸出$sum
(命令替換)${sum%% *}
– 輸出所有內容,直到第一個空格(Parameter Substitution),與以下之一相同:$(sed 's/ .*//' <<< "$sum") $(echo "$sum" | sed 's/ .*//')
${i##*.}
– 輸出最後一個點之後的所有內容(參數替換),與以下內容之一相同:$(sed 's/.*\.//' <<< "$i") $(echo "$i" | sed 's/.*\.//')
如果您需要遞歸地重命名不同文件夾中的文件,請使用
find
該-exec
選項。