Me gustaría eliminar todos los subdirectorios y archivos de un directorio determinado, excepto los directorios que coinciden con un patrón determinado:
example_dir/model-*/gen-*/share/**
Configuración general: generé varios modelos (> 100) y cada uno tiene> = 1 generación (es). Dentro de esos modelos (por ejemplo, example_dir/model-0/gen-0/
) hay varios directorios y subdirectorios.
Resultado deseado: Me gustaría eliminar todos los directorios y archivos excepto los que coinciden:
example_dir/model-*/gen-*/share/
¿Dentro de cada modelo/generación/sería algo como esto?:
rm -rf !(share)
Respuesta1
No estoy seguro de haber entendido completamente su pregunta y no estoy seguro de qué preguntas de seguimiento tienen sentido. Una cosa que me pregunto es si tiene un árbol de directorios como
example_dir
|-- model-0
| |-- gen-0
| | |-- share
| | |-- trash
| | | |-- more_trash
| | |-- file123.txt
| |-- grandfather
|-- platypus
foo
¿ Es suficiente eliminar example_dir/model-0/gen-0/trash
(y su contenido), o también desea eliminar
example_dir/model-0/grandfather
y example_dir/platypus
? foo
Y qué tal example_dir/model-0/gen-0/file123.txt
?
Si desea eliminar trash
(y su contenido) y file123.txt
, intente
#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)
Si desea eliminar trash
(y su contenido) pero conservar file123.txt
, intente
#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)/
(agregando un /
después !(share)
).
De cualquier manera, revise el resultado detenidamente y, si está seguro de que es lo que desea, ejecute el comando nuevamente sin el archivo echo
.
Si también desea eliminar directorios de nivel superior que no sean example_dir
directorios de primer nivel que no coincidan con el model-*
patrón o directorios de segundo nivel que no coincidan con el gen-*
patrón, edite su pregunta para aclararla.