У меня есть определенная группа из двух папок, которые находятся во многих местах на моем сервере CentOS. Допустим, эти папки выглядят так:
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
Конечно, вы можете повторить это и с dog вместо cat :-)
Проверьте перед с помощью ls
и удалите после с помощью rm
. Примечания:
Вы должны помнить о необходимости включить globstar ( shopt -s globstar
) в каждой новой оболочке, в которой вы хотите использовать этот синтаксис, иначе вы можете поместить его в свой ~..bash_rc
файл...
решение2
Пробеги find
дважды
find . -path "*/aaa/bbb/cat/*" -delete
find . -path "*/aaa/bbb/dog/*" -delete
или сделать
find . \( -path "*/aaa/bbb/cat/*" -o -path "*/aaa/bbb/dog/*" \) -delete