2Gより大きく、空き容量がX未満のファイルの検索と削除

2Gより大きく、空き容量がX未満のファイルの検索と削除

次の規則に従って、マウントポイントの下にあるstdout/というファイルを削除する方法は?stderr/data/sdf

  1. 使用可能なディスク容量(上記/dev/sdf)が100 G未満です。

  2. stdoutまたは、ファイルstderrサイズが2Gより大きい。

    /data/sdf/hadoop/yarn/log/application_1575355124522_0458/container_e245_1575355124522_0458_01_000002/stdout
    /data/sdf/hadoop/yarn/log/application_1575355124522_0458/container_e245_1575355124522_0458_03_000002/stdout
    /data/sdf/hadoop/yarn/log/application_1515153382036_0001/container_e13_1515153382036_0001_02_000003/stdout    
    

~からdf -h

/dev/sdf                   80G   76G  3.7G  82% /data/sdb

findサイズに応じてファイルを削除するために、次の呼び出しを考えました。

find /grid/sdf -type f \( -name "stdout" -o -name "stderr" \) -size +2000M -delete

しかし、利用可能なディスク容量を確認する方法がわかりません。

答え1

GNU を仮定するとdf、たとえば、次のように空きディスク領域の条件を追加できます。

[[ $(df --output=avail -B1 /grid/sdf | tail -n 1) -lt 100*1024*1024*1024 ]] && \
find /grid/sdf -type f \( -name "stdout" -o -name "stderr" \) -size +2000M -delete

必要に応じて調整できます(空き容量が100GiB未満の場合はファイルを削除するなど)。

while [[ $(df --output=avail -B1 /grid/sdf | tail -n 1) -lt 100*1024*1024*1024 ]]; do
    find /grid/sdf -type f \( -name "stdout" -o -name "stderr" \) -size +2000M -delete -quit
done

(該当ファイルを削除しても十分な空き容量が確保されない場合は無限に繰り返されます。)

他にも以下をdf使用できます。 (必須ではありません)findmntdf --output=avail -B1 /grid/sdf | tail -n 1findmnt -nbo AVAIL /grid/sdftail

関連情報