将每 500 个文件移动到新目录中

将每 500 个文件移动到新目录中

我有一个包含 10,665 个 jpeg 文件的目录。

我想将 500 个文件移动到新目录,将 500 个文件移动到下一个目录,依此类推。

必须首先移动最大的文件:500-1 包含 500 个最大的文件,500-2 包含下一个最大的 500 个文件,依此类推。

我想要这样做的原因是我想将 JPEG 提供给某人,但文件管理器挂起,因为一个目录中有太多 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 '##'当您确定它们将执行您希望它们执行的操作时,请从循环中的两条操作线中删除。printf如果您不需要有关进展情况的状态报告,请注释掉。

相关内容