Eliminar todos los archivos en una carpeta específica en Linux

Eliminar todos los archivos en una carpeta específica en Linux

Tengo un grupo particular de dos carpetas que se encuentran en muchos lugares de mi servidor CentOS. Digamos que estas carpetas se ven así:

aaa/bbb/cat
aaa/bbb/dog

Los nombres y la estructura de , aaay son fijos, pero aparecen en varios lugares del servidor. Por ejemplo:bbbcatdog

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

¿Qué comando puedo usar para eliminar TODOS los archivos dentro de cada instancia de caty dogen el servidor, pero solo cuando son subcarpetas de bbby aaarespectivamente, como se muestra arriba?

¡Gracias!

Respuesta1

Desde bash 4.0 puedes usar shopt -s globstar. Por defecto no está habilitado.

con tu ejemplo

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

da carpeta1/aaa/bbb/cat/1

shopt -s globstar
ls **/aaa/bbb/cat/*     # globstar ENABLED

da

folder1/aaa/bbb/cat/1  folder2/folder3/folder4/aaa/bbb/cat/3

Este es el tree .de tu ejemplo.

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

Por supuesto, también puedes repetirlo con perro en lugar de gato :-)
Comprueba antes con lsy elimina después con rm. Notas:
Debe recordar habilitar globstar ( shopt -s globstar) en cada nuevo shell en el que desee usar esa sintaxis; de lo contrario, puede colocarla en su ~..bash_rcarchivo...

Respuesta2

correr finddos veces

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

o hacer

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

información relacionada