Удалить все файлы в указанной папке в Linux

Удалить все файлы в указанной папке в Linux

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

Связанный контент