Linuxで特定のフォルダ内のすべてのファイルを削除する

Linuxで特定のフォルダ内のすべてのファイルを削除する

CentOS サーバー上のさまざまな場所に 2 つのフォルダーの特定のグループがあります。これらのフォルダーは次のようになっているとします。

aaa/bbb/cat
aaa/bbb/dog

、、aaaおよびの名前と構造は固定されていますが、サーバー内の複数の場所に出現します。例:bbbcatdog

/folder1/aaa/bbb/cat
/folder1/aaa/bbb/dog
/folder2/folder3/folder4/aaa/bbb/cat
/folder2/folder3/folder4/aaa/bbb/dog
etc...

サーバー上のcatおよびのすべてのインスタンス内のすべてのファイルを、ただし上記のようにそれぞれおよびのサブフォルダーである場合のみ削除するには、どのコマンドを使用すればよいですか?dogbbbaaa

ありがとう!

答え1

bash 4.0 以降では を使用できますshopt -s globstar。デフォルトでは有効になっていません。

あなたの例で

ls **/aaa/bbb/cat/*     # globstar not enabled

フォルダ1/aaa/bbb/cat/1 を返します。

shopt -s globstar
ls **/aaa/bbb/cat/*     # globstar ENABLED

与える

folder1/aaa/bbb/cat/1  folder2/folder3/folder4/aaa/bbb/cat/3

これはtree .あなたの例の です。

.
├── folder1
│   └── aaa
│       └── bbb
│           ├── cat
│           │   └── 1
│           └── dog
│               └── 1
├── folder2
│   └── folder3
│       └── folder4
│           └── aaa
│               └── bbb
│                   ├── cat
│                   │   └── 3
│                   └── dog
│                       └── 4

もちろん、cat の代わりに dog を使って繰り返すこともできます :-)
で前をチェックしls、 で後を削除しますrm。注:その構文を使用する新しいシェルごとに
globstar ( ) を有効にすることを忘れないでください。shopt -s globstarそうでない場合は、ファイルに記述することができます~..bash_rc...

答え2

find2回実行する

find . -path "*/aaa/bbb/cat/*" -delete
find . -path "*/aaa/bbb/dog/*" -delete

または

find . \( -path "*/aaa/bbb/cat/*" -o -path "*/aaa/bbb/dog/*" \) -delete

関連情報