10,665個のJPEGファイルを含むディレクトリがあります。
500個のファイルを新しいディレクトリに移動し、500個のファイルを次のディレクトリに移動したいと思います。
最大のファイルを最初に移動する必要があります。 500-1 には 500 個の最大ファイルが含まれ、500-2 には次に大きな 500 個のファイルが含まれる式です。
これを行う理由は、JPEGを誰かに提供したいのですが、1つのディレクトリにJPEGが多すぎてファイルマネージャが中断されるからです。
答え1
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 '##'
あなたが望むことを彼らがやると確信している場合は、ループから2つのアクションラインを削除してください。printf
進捗状況に関するステータスレポートが必要ない場合は、コメントを付けてください。