500ファイルごとに新しいディレクトリに移動[閉じる]

500ファイルごとに新しいディレクトリに移動[閉じる]

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進捗状況に関するステータスレポートが必要ない場合は、コメントを付けてください。

おすすめ記事