For
在新目錄中移動每 500 個文件
我有一個包含 10,665 個 jpeg 文件的目錄。
我想將 500 個文件移動到新目錄,將 500 個文件移動到下一個目錄,等等。
必須首先移動最大的文件:500-1 包含 500 個最大的文件,500-2 包含下一個最大的 500 個文件,依此類推。
我想這樣做的原因是我想將 JPEG 文件提供給某人並且文件管理器掛起,因為一個目錄中有這麼多。
在基於 Linux 的系統或其他使用 GNU 的系統上,
find
您可以使用類似這樣的循環find -maxdepth 1 -type f -printf '%s\t%P\0' | sort -z -rn | ( # x is max files per directory; d is directory number; k is file counter x=500 d=1 k=1 while IFS=$'\t' read -r -d '' size path do printf "%d\t%d\t%s\n" $k $d "$path" # File nr, Directory nr, Filename echo "##" mkdir -p "/path/to/dir-$d" echo "##" mv -f "$path" "/path/to/dir-$d/${path##*/}" [[ $((k++)) -ge $x ]] && { k=1; ((d++)); } # Next directory done )
echo '##'
當您確定它們將執行您希望它們執行的操作時,從循環中的兩個操作行中刪除。註釋掉printf
如果您不需要關於正在發生的事情的狀態報告。