Excluindo todos os subdiretórios, exceto aqueles que correspondem a um determinado padrão

Excluindo todos os subdiretórios, exceto aqueles que correspondem a um determinado padrão

Gostaria de excluir todos os subdiretórios e arquivos de um determinado diretório, exceto os diretórios que correspondem a um determinado padrão:

example_dir/model-*/gen-*/share/**

Configuração geral: gerei vários modelos (> 100), cada um com >=1 geração(s). Dentro desses modelos (por exemplo, example_dir/model-0/gen-0/) existem vários diretórios e subdiretórios.

Resultado desejado: gostaria de excluir todos os diretórios e arquivos, exceto aqueles que correspondem:

example_dir/model-*/gen-*/share/

Dentro de cada modelo/geração/ seria algo assim?:

rm -rf !(share)

Responder1

Não tenho certeza se entendi totalmente sua pergunta e não tenho certeza de quais perguntas complementares fazem sentido. Uma coisa que estou me perguntando é se você tem uma árvore de diretórios como

example_dir
|-- model-0
|   |-- gen-0
|   |   |-- share
|   |   |-- trash
|   |   |   |-- more_trash
|   |   |-- file123.txt
|   |-- grandfather
|-- platypus
foo

é suficiente excluir (e seu conteúdo ) example_dir/model-0/gen-0/trash ou você também deseja excluir example_dir/model-0/grandfathere example_dir/platypus? fooE que tal example_dir/model-0/gen-0/file123.txt?

Se você deseja excluir trash(e seu conteúdo) e file123.txt, tente

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)

Se você deseja excluir trash(e seu conteúdo), mas preservar file123.txt, tente

#!/bin/bash
shopt -s extglob
echo rm -rf example_dir/model-*/gen-*/!(share)/

(adicionando um /depois !(share)).

De qualquer forma, examine a saída com atenção e, se tiver certeza de que é isso que deseja, execute o comando novamente sem a extensão  echo.

Se você também deseja excluir diretórios de nível superior diferentes de example_dirdiretórios de primeiro nível que não correspondem ao model-*padrão ou diretórios de segundo nível que não correspondem ao gen-*padrão, edite sua pergunta para esclarecer.

informação relacionada