ファイル名にタイムスタンプがあるフォルダ内のすべてのファイルを削除する

ファイル名にタイムスタンプがあるフォルダ内のすべてのファイルを削除する

ファイル名fcrjlog-11-21-2019-1.txtが次の形式のフォルダー内のすべてのファイルを削除する必要があります。フォルダ内の対応するファイル名を持つファイルをすべて削除したいと思います。

答え1

 find . ! -type d -name 'fcrjlog-??-??-????-?.txt' -delete

-delete非標準拡張をサポートしていない場合に置き換えてください)。-exec rm -f {} +find-delete

?次を表すワイルドカード演算子です。任意の単一文字[[:digit:]]一致する10進数文字(0123456789)にのみ置き換えられました。

! -type dファイルタイプの除外目次-delete空でない場合は削除できません)、-type fより制限的なものに置き換えることができます(次のみ)。定期的なファイル(シンボリックリンク、ディレクトリ、ソケット、fifo、デバイスなどを含む他のすべての種類のファイルを除く)GNUは、find-xtype fのように識別されたファイル選択もサポートします。定期的なシンボリックリンクが解決された後。

必要な数の文字、空でない文字のシーケンス、または最初の文字ではなく、空でない文字のシーケンス(隠しファイルを除く)と一致するものfcrjlogに置き換えます。*?*[!.]*.

答え2

通常、すでに試したことが表示されます。これにより、より多くの応答が得られます。この問題を解決するには、正規表現を参照していくつかの概念を理解する必要があります。タイムスタンプの「x」が数字であるとしますか?その場合は、次の正規表現を使用して開始できます。

/tmp>ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$"
test-12-12-1234-9.txt

/tmp>rm $(ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$")

部品を分解します。

"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{4}  -- Exactly four numeric characters
 -         -- A literal dash "-"
 [0-9]     -- One numeric character
 .         -- Any character.  Use \. to insist on a dot
 txt       -- The literal string "txt"
 $         -- An anchor that means the txt has to be at the end of the line
"

関連情報