1

У меня есть особая группа из двух папок, которые находятся во многих местах на моем сервере 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 соответственно, как показано выше?

Спасибо!

2 ответа2

1

В bash 4.0 вы можете использовать shopt -s globstar . По умолчанию не включено.

С вашим примером

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

дает папку 1/ ААА / BBB / кошка / 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

Конечно, вы можете повторить это с собакой вместо кошки :-)
Проверьте до с помощью ls и удалите после с помощью rm . Заметки:
Не забудьте включить globstar (shopt -s globstar) в каждой новой оболочке, в которой вы хотите использовать этот синтаксис, иначе вы можете поместить его в файл ~..bash_rc ...

1

Запустить find дважды

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

или сделать

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .