![ファイル名にタイムスタンプがあるフォルダ内のすべてのファイルを削除する](https://rvso.com/image/164724/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%97%E3%81%8C%E3%81%82%E3%82%8B%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E5%86%85%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B.png)
フォルダー内のファイル名にフォーマットがあるファイルをすべて削除する必要があります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
"