Eliminar todos los subdirectorios excepto los que coinciden con un patrón determinado

Eliminar todos los subdirectorios excepto los que coinciden con un patrón determinado

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/grandfathery example_dir/platypus? fooY 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_dirdirectorios 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.

información relacionada