Remova todos os arquivos de uma pasta específica no Linux

Remova todos os arquivos de uma pasta específica no Linux

Eu tenho um grupo específico de duas pastas que estão em vários lugares do meu servidor CentOS. Digamos que essas pastas tenham esta aparência:

aaa/bbb/cat
aaa/bbb/dog

Os nomes e a estrutura de , aaae são fixos, mas ocorrem em vários locais do servidor. Por exemplo:bbbcatdog

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

Qual comando posso usar para excluir TODOS os arquivos em todas as instâncias cate dogno servidor, mas apenas quando eles são subpastas de bbbe aaarespectivamente, conforme mostrado acima?

Obrigado!

Responder1

No bash 4.0 você pode usar shopt -s globstar. Por padrão não habilitado.

Com o seu exemplo

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

dá pasta1/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

Este é o tree .seu exemplo.

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

Claro que você também pode repetir com cachorro em vez de gato :-)
Verifique antes com lse remova depois com rm. Notas:
Você deve se lembrar de ativar globstar( shopt -s globstar) em cada novo shell no qual deseja usar essa sintaxe, caso contrário, você pode colocá-la em seu ~..bash_rcarquivo...

Responder2

Corra findduas vezes

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

ou faça

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

informação relacionada