さまざまなサイズの150万のファイル(メールファイル)を含むフォルダがあります。たとえば、ディレクトリを作成してa
フォルダが指定されたサイズに達するまで、一部のファイル(すべて数値タイムスタンプで始まる)をフォルダに移動したいとします。どうすればいいですか?mv
a
a
プロシージャやループを避けることは利点(例えば1行)ですが、機能するすべてをお勧めします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