web-dev-qa-db-ja.com

1つを除くすべての.logファイルを削除する

1つを除いて、.log拡張子が付いたすべてのファイルを削除します。 mongodbログファイルを除くすべてのフォルダーからすべての.logファイルを削除することは可能ですか?

7
Zohaib Basit

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"
  • -inamemongodb.logの大文字と小文字の両方のバージョンを保持します。

次に、以下を使用してそれらを削除します。

$ find -not -iname mongodb.log -name "*.log" -delete

もう一度確認すると、ログファイルが期待どおりに削除されていますが、mongodb.logが残っています。

$ ls
bar  foo  mongodb.log
11
Ravexina

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個以上のディレクトリおよびサブディレクトリに一致します。パターンの後に/が続く場合は、ディレクトリとサブディレクトリのみが一致します。

5
terdon