フォルダ全体のサイズが10Gを超える場合は、フォルダから最も古いファイルを削除してください。

フォルダ全体のサイズが10Gを超える場合は、フォルダから最も古いファイルを削除してください。

次の構文はフォルダの下のファイルを削除しますhive

/usr/bin/find /var/log/hive -type f -print -delete

私は次のことをしようとしています:

/var/log/hiveフォルダサイズが次より大きい場合は、最も古いファイルのみを削除してください。10G

注 – ハイブフォルダのサブサイズが正確に 10G の場合は削除処理が停止し、サイズが 10G を超えるとクリーンアップ処理が開始されます。

findコマンドまたは他の方法を使用してこのソリューションを作成できますか?

ベストアンサー1

GNUシステムでは、次のことができます。

cd /var/log/hive &&
  find . -type f -printf '%T@ %b :%p\0' |
    sort -zrn |
    gawk -v RS='\0' -v ORS='\0' '
      BEGIN {max = 10 * 1024 * 1024 * 1024} # 10GiB; use max=10e9 for 10GB
      {du += 512 * $2}
      du > max {
        sub("[^:]*:", ""); print
      }' | xargs -r0 echo rm -f

つまり、通常のファイルを最後の変更時刻(最新のエントリから最も古いエントリの順に)に並べ替え、累積ディスク使用量を計算し(ここにハードリンクがないと仮定)、10GiBのしきい値を超えると各ファイルを削除します。

カタログファイル自体のサイズは考慮されません。一般ファイルのディスク使用量のみを考慮してください。

echo結果が満足な場合は削除してください。

一行:

find . -type f -printf '%T@ %b :%p\0' |sort -zrn|gawk -vRS='\0' -vORS='\0' '{du+=512*$2};du>10*(2^30){sub("[^:]*:","");print}'|xargs -r0 echo rm -f

すべての一般ファイルの累積ディスク使用量が10GiBを超える場合は、* .wspファイルのみを削除するには、最初にwsp以外のファイルを一覧表示する必要があります。同時に、以前に失われたディレクトリやその他の非正規ファイルのディスク使用量も考慮に入れることができます。

cd /var/log/hive &&
  find . \( -type f -name '*.wsp' -printf WSP -o -printf OTHER \) \
     -printf ' %T@ %b :%p\0' |
    sort -zk 1,1 -k2,2rn |
    gawk -v RS='\0' -v ORS='\0' '
      BEGIN {max = 10 * 1024 * 1024 * 1024} # 10 GiB
      {du += 512 * $3}
      du > max && $1 == "WSP" {
        sub("[^:]*:", ""); print
      }' | xargs -r0 echo rm -f

おすすめ記事