如何测量目录中文件的大小?

Bil*_*ray 1 linux files

我有一个装满 600GB 文件的文件夹。我想自动将前 300 个复制到一个文件夹,其余的复制到另一个文件夹。我不确定如何使用 ls 或任何其他方式限制结果,以便我可以将其作为参数传递...

平台是linux...

编辑:我想移动 300gb,而不是前 300 个文件。文件大小是任意的,顺序无关紧要。

Kyl*_*ndt 5

更新:哦,第一个 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。