我有一个文件夹,里面有 150 万个不同大小的文件(邮件文件)。例如,我想创建一个目录,并将其中一些文件(全部以数字时间戳开头)a
移动到文件夹中,直到文件夹达到指定大小。我该怎么做?mv
a
a
避免任何程序for
或while
循环将是一个优点(即一行),但任何有效的东西都很棒!
答案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