Remove todos os arquivos em uma pasta específica no Linux

1

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

aaa/bbb/cat
aaa/bbb/dog

Os nomes e a estrutura de aaa , bbb , cat e dog são fixos, mas ocorrem em vários locais no servidor. Por exemplo:

/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 de cat e dog no servidor, mas apenas quando elas forem subpastas de bbb e aaa , respectivamente, conforme mostrado acima?

Obrigado!

    
por R C 18.04.2015 / 10:41

2 respostas

1

Do bash 4.0 você pode usar shopt -s globstar . Por padrão, não ativado.

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 . do seu exemplo.

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

Claro que você pode repetir com cachorro em vez de gato também :-)
Verifique antes com ls e remova depois com rm . Notas:
Você tem que lembrar de ativar o globstar ( shopt -s globstar ) em cada novo shell no qual você deseja usar essa sintaxe, senão você pode colocá-lo no seu arquivo ~..bash_rc ...

    
por 18.04.2015 / 11:04
1

Executar find duas 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
    
por 18.04.2015 / 11:49