我有一个包含 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
如果您不需要有关进展情况的状态报告,请注释掉。