パターンに一致するディレクトリのファイル数を取得し、最も古いファイルを削除します。

パターンに一致するディレクトリのファイル数を取得し、最も古いファイルを削除します。

私は次のことをしたいと思います:

  1. 指定されたパターンに一致する指定されたディレクトリのファイル数を取得します。たとえば、次のようになります。

    ExtractBackup_{date}.tar.gz

  2. 数字が2以上の場合、パターンに一致する最も古いファイルは削除されます。

Korn Shell( ) スクリプトを使用して.kshこれを行うにはどうすればよいですか?

ベストアンサー1

パターンに一致するファイル数を計算する直接的な方法はありませんが、2つの簡単なステップで計算できます。ファイルリストを作成し、リストの長さを取得します。日付がYYYYMMDD形式であると仮定します(これにより位置パラメータが破損することに注意してください)。

set ExtractBackup_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].tar.gz
if [ -e "$1" ]; then count=$#; else count=0; fi

ksh93では、一致するファイルがない場合はリストを空にして計算を簡素化できます。どのファイルとも一致しないパターンは、1つの単語を含むリストに置き換えられます(つまり、パターン自体)。 ksh93 には、パターンを空のリストに拡張する構成があります。 Kshには配列があるので、位置引数を台無しにする必要はありません。

backups=(~(N:ExtractBackup_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].tar.gz))
count=${#backups[@]}

日付がYYYYMMDD形式の場合、最も古いファイルはリストの最初の項目になります。

set ExtractBackup_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].tar.gz
if [ $# -ge 2 ]; then rm "$1"; fi

おすすめ記事