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 , aaa
y son fijos, pero aparecen en varios lugares del servidor. Por ejemplo:bbb
cat
dog
/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 cat
y dog
en el servidor, pero solo cuando son subcarpetas de bbb
y aaa
respectivamente, 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 ls
y 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_rc
archivo...
Respuesta2
correr find
dos 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