For

在新目錄中移動每 500 個文件

  • November 29, 2020

我有一個包含 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如果您不需要關於正在發生的事情的狀態報告。

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