Files

批量重命名32000個文件-拆分成多個子目錄

  • March 6, 2018

我有一個上傳文件的網路伺服器。有一個腳本可以為它們分配數字 ID 並將它們儲存在相應的子目錄中。

我現在已經上傳了 32000 個這樣的上傳文件,這對於伺服器來說太多了,無法在一個目錄中處理。我正在使用的腳本確實有一種“命名空間”上傳的方法,這樣 ID 12345 - 而不是坐在裡面/files/12345- 會坐在/files/namespaced/000/012/345.

程式碼可以很好地處理這個問題,但是我現在有 32000 個子目錄的命名樣式錯誤。瀏覽現有文件並將它們放在正確位置的最簡單方法是什麼?

這假定目錄名稱的名稱中沒有任何奇怪的字元,例如空格或換行符,並且沒有以點開頭的文件名。

未經測試。

find /files -type d | while read -r dir
do
   base="000000${dir##*/}"
   new="/files/namespaced/${base: -9:3}/${base: -6:3}/${base: -3}"
   mkdir -p "$new"
   mv "$dir/*" "$new"
   rmdir "$dir"
done

獲取新目錄名稱的另一種方法:

new=$(echo "$dir" | sed 's|...$|/&|;s|\(.*\)/\(.*\)/\(...\)$|\1/namespaced/000000\2/\3|; s|\(.*\)/.*\(...\)\(...\)/\(...\)$|\1/\2/\3/\4|' "$dir")

引用自:https://serverfault.com/questions/150993