如何将文件添加到文件夹直至达到特定大小限制?

如何将文件添加到文件夹直至达到特定大小限制?

我有一个文件夹,里面有 150 万个不同大小的文件(邮件文件)。例如,我想创建一个目录,并将其中一些文件(全部以数字时间戳开头)a移动到文件夹中,直到文件夹达到指定大小。我该怎么做?mvaa

避免任何程序forwhile循环将是一个优点(即一行),但任何有效的东西都很棒!

答案1

max_k=1000
sum=0
target_dir_path="/target/dir"
find . -mindepth 1 -maxdepth 1 -type f -printf '%k %p\0' |
   while IFS= read -r -d $'\0' line; do
       size="${line%% *}"
       path="${line#* }"
       sum=$((sum+size))
       if [ "$sum" -le "$max_k" ]; then
           printf "%s\0" "$path"
       else
           break
       fi
    done | xargs -0 echo mv -t "target_dir_path"

答案2

您可以创建所需大小的特殊 LV(或分区)并将其安装在“a”目录下。

如果您想留出一些空闲空间,请将其与配额结合起来。

也有类似的问题:

https://stackoverflow.com/questions/8148715/how-to-set-limit-on-directory-size-in-linux

相关内容