特定のサイズ制限に達するまでフォルダにファイルを追加する方法は?

特定のサイズ制限に達するまでフォルダにファイルを追加する方法は?

さまざまなサイズの150万のファイル(メールファイル)を含むフォルダがあります。たとえば、ディレクトリを作成してaフォルダが指定されたサイズに達するまで、一部のファイル(すべて数値タイムスタンプで始まる)をフォルダに移動したいとします。どうすればいいですか?mvaa

プロシージャやループを避けることは利点(例えば1行)ですが、機能するすべてをお勧めします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

関連情報