特定の日付より古いファイル名に特定の文字列を含むファイルを見つけて削除します。

特定の日付より古いファイル名に特定の文字列を含むファイルを見つけて削除します。

ディレクトリから5日以上古いファイルを削除するには、次のコマンドを使用できます。

find /directory -type f -mtime +5 -delete

しかし、私の場合は、名前に「YYYY-MM-DD」があり、5日後のファイルだけを削除したいと思います。

以下は、いくつかのファイル名の例です。

TEST_2016-11-20_14_02_52.log
server.log.2016-11-13
locsub.log.2016-12-04
wsgi.txt.2016-12-01

名前の形式が「ファイル」のみ年月日'と5日後のコンテンツは削除する必要があります。

正規表現を使用してfindコマンドでファイル名を照合する方法は?

ベストアンサー1

GNUの使用find:

find . -type f -mtime +5 \
    -regextype egrep -regex '.*[0-9]{4}-[0-9]{2}-[0-9]{2}[^/]*$' \
    -delete

正規表現は、形式に日付を含むパス名のデフォルト名のすべての文字列と一致しますYYYY-MM-DDXXYYYY-MM-DDZZwhereXXZZisは他の文字と一致する可能性があります。

最後は、[^/]*$式が現在のパス名の基本名と実際に一致することを確認し、「/残りの文字列と一致しない」を意味します。

代わりにシェルワイルドカードパターンを使用してください(メンテナンスが簡単です)。

find . -type f -mtime +5 \
    -name '*[0-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]*' \
    -delete

これは-mtime +5、期間が整数日数のファイルに対するものです。厳しく5日以上であれば6日以上です。 5日以上経過したファイルの場合-mtime +4

おすすめ記事