CentOS サーバー上のさまざまな場所に 2 つのフォルダーの特定のグループがあります。これらのフォルダーは次のようになっているとします。
aaa/bbb/cat
aaa/bbb/dog
、、aaa
およびの名前と構造は固定されていますが、サーバー内の複数の場所に出現します。例:bbb
cat
dog
/folder1/aaa/bbb/cat
/folder1/aaa/bbb/dog
/folder2/folder3/folder4/aaa/bbb/cat
/folder2/folder3/folder4/aaa/bbb/dog
etc...
サーバー上のcat
およびのすべてのインスタンス内のすべてのファイルを、ただし上記のようにそれぞれおよびのサブフォルダーである場合のみ削除するには、どのコマンドを使用すればよいですか?dog
bbb
aaa
ありがとう!
答え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
find
2回実行する
find . -path "*/aaa/bbb/cat/*" -delete
find . -path "*/aaa/bbb/dog/*" -delete
または
find . \( -path "*/aaa/bbb/cat/*" -o -path "*/aaa/bbb/dog/*" \) -delete