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 , aaa
e são fixos, mas ocorrem em vários locais do servidor. Por exemplo:bbb
cat
dog
/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 cat
e dog
no servidor, mas apenas quando eles são subpastas de bbb
e aaa
respectivamente, 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
dá
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 ls
e 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_rc
arquivo...
Responder2
Corra 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