Files
批量重命名32000個文件-拆分成多個子目錄
我有一個上傳文件的網路伺服器。有一個腳本可以為它們分配數字 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")