我有一个装满 600GB 文件的文件夹。我想自动将前 300 个复制到一个文件夹,其余的复制到另一个文件夹。我不确定如何使用 ls 或任何其他方式限制结果,以便我可以将其作为参数传递...
平台是linux...
编辑:我想移动 300gb,而不是前 300 个文件。文件大小是任意的,顺序无关紧要。
更新:哦,第一个 300GB,那么......这可能很慢,取决于文件大小,但我喜欢这个练习:-)
filesize=0
for i in *; do
filesize=$(stat -c "%s" "$i");
(( totalsize += filesize ));
if [[ $totalsize < 322122547200 ]]; then
mv "$i" first_300/
else
mv "$i" the_rest/
fi
done
Run Code Online (Sandbox Code Playgroud)
希望 int 的大小没有问题。
如果您的意思是将它们分成每个包含 300 个文件的文件夹,也许您需要以下内容:
folder=0
counter=0
for i in *; do
mv $i foo_$folder/
if [[ $(( counter % 10 )) -eq 0 ]]; then
(( folder++ ));
fi
(( counter++ ))
done
Run Code Online (Sandbox Code Playgroud)
尽管这可能不如某些 find 命令快。如果您只想执行第一个 300 命令,您可以使用相同的计数器策略,但使用一段时间 $counter -le 300。