完全なスクリプト。

完全なスクリプト。

設定された制限を超えると、古いファイルを消去するスクリプトがあります。

私は次のコマンドを持っています:

/bin/rm -f `/bin/ls -t $bkup_p/mysql.daily/*  2> /dev/null | /bin/awk 'NR>'5`

$bkup_p に空白がある可能性があるため動作します。

/bin/rm -f `/bin/ls -t "$bkup_p/mysql.daily/*"  2> /dev/null | /bin/awk 'NR>'5`

しかし、これはうまくいきません。問題のファイルは表示されず、空です。

ベストアンサー1

Bash は、変更時間に基づいてファイルをフィルタリングし、そのファイルに対してコマンドを実行するときにはあまり便利ではありません。

z-shellを試してみることをお勧めします。まずを実行してzshから

rm -i -- "$bkup_p"/mysql.daily/*(DN.Om[1,5])

これにより、特定のディレクトリで最も古い5つの一般的なファイルが削除されます。これはあなたが望むものかもしれません。明らかに、これは必要に応じて最終的にrm -i変更されますrm -f

5 つの最新のファイルを削除するには、次の手順を実行します。

rm -i -- "$bkup_p"/mysql.daily/*(DN.om[1,5])

さて、それがどのように機能するか。内部のすべては、()基本的に必要に応じてファイルをフィルタリングするglob修飾子です。

  • Dドットファイル(で始まるファイル.)を含む
  • N一致するものがない場合は、エラーを報告しないでください。
  • .一般ファイルのみ選択
  • om修正時間でソート(Om逆順)
  • [1,5]リストから5つのファイルのみを選択してください。

私はこれらすべてがファイル名の特殊文字(スペース、改行文字など)に対して機能する必要があると思います。

おすすめ記事