1つを除いて、.log
拡張子が付いたすべてのファイルを削除します。 mongodbログファイルを除くすべてのフォルダーからすべての.log
ファイルを削除することは可能ですか?
find
コマンドを使用できますが、使用中は注意してください。すべてのものが削除される可能性があります。
重要:最初に、-delete
オプションを指定せずにコマンドを実行して、出力が削除するものであることを確認する必要があります。 -name
は正確なファイル名を探すことに注意してください。
$ find -not -name mongodb.log -name "*.log"
出力が適切で、コマンドが削除するファイルのみを見つけたと確信できる場合は、コマンドのENDに-delete
オプションを追加する必要があります。
$ find -not -name mongodb.log -name "*.log" -delete
find
のオプションの順序は重要です。この場合、-delete
オプションをコマンドの最後以外の場所に配置すると、すべてが削除されます。
次のファイルがあるとします。
$ ls
1.log 2.log 3.log 4.log 5.log bar foo mongodb.log
*.log
を除くすべてのmongodb.log
をリストしましょう。出力を確認し、log
ファイル以外のものが含まれていないことを確認します。
$ find -not -iname mongodb.log -name "*.log"
-iname
! mongodb.log
の大文字と小文字の両方のバージョンを保持します。次に、以下を使用してそれらを削除します。
$ find -not -iname mongodb.log -name "*.log" -delete
もう一度確認すると、ログファイルが期待どおりに削除されていますが、mongodb.log
が残っています。
$ ls
bar foo mongodb.log
mongodb.log
という名前のファイルを除くすべてのファイルを削除するには、拡張グロビングを使用できます。まず、オプションを有効にします。
shopt -s extglob
そして、あなたは実行することができます:
rm !(mongodb.log)
または、.log
ではなくmongodb.log
拡張子を持つファイルのみを削除するには、次のようにします。
rm !(mongodb).log
例えば:
$ ls
file1 file2 file3.log file4.log file5.log mongodb.log
$ rm !(mongodb).log
$ ls
file1 file2 mongodb.log
これを再帰的にする必要がある場合は、サブディレクトリ内のファイルにも一致させるために、globstar
オプションを使用できます。
shopt -s globstar
次に実行します:
rm **/!(mongodb).log
例えば:
$ tree
.
├── bar
│ └── baz
│ └── bad
│ ├── file1
│ ├── file2
│ ├── file3.log
│ ├── file4.log
│ ├── file5.log
│ └── mongodb.log
├── file1
├── file2
├── file3.log
├── file4.log
├── file5.log
└── mongodb.log
$ rm **/!(mongodb).log
$ tree
.
├── bar
│ └── baz
│ └── bad
│ ├── file1
│ ├── file2
│ └── mongodb.log
├── file1
├── file2
└── mongodb.log
3 directories, 6 files
man bash
から:
extglobシェルオプションが組み込みのshoptを使用して有効になっている場合、いくつかの拡張パターンマッチング演算子が認識されます。以下の説明では、パターンリストはで区切られた1つ以上のパターンのリストです。複合パターンは、次のサブパターンの1つ以上を使用して形成できます。
?(pattern-list) Matches zero or one occurrence of the given patterns *(pattern-list) Matches zero or more occurrences of the given patterns +(pattern-list) Matches one or more occurrences of the given patterns @(pattern-list) Matches one of the given patterns !(pattern-list) Matches anything except one of the given patterns
globstar
設定されている場合、パス名展開コンテキストで使用されるパターン**は、すべてのファイルと0個以上のディレクトリおよびサブディレクトリに一致します。パターンの後に/が続く場合は、ディレクトリとサブディレクトリのみが一致します。