Excluir subdiretórios deixando um dado [duplicado]

0

Eu preciso excluir todos os subdiretórios e seus conteúdos em uma determinada pasta, deixando um subdiretório específico. Existe uma maneira de fazer isso usando o bash ou um script de shell? A estrutura do arquivo é mostrada abaixo.

container_dir
│
├── delete_this_dir
│   ├── file1.txt
│   └── file2.txt
│
├── delete_this_dir
│   ├── l1.txt
│   └── l2.txt
│
└── keep_this_dir
    ├── file1.txt
    ├── file2.txt
    └── file3.txt
    
por S tommo 12.07.2017 / 15:10

3 respostas

1

No bash, use extglob para excluir o diretório que você deseja manter :

shopt -s extglob
rm -rf container_dir/!(keep_this_dir)
    
por 12.07.2017 / 15:34
0

Faça o backup deste container_dir e tente isto:

find $container_dir/* -path $keep_this_dir -prune -o -name "*" -type d -exec rm -rfv {} \;

Mas eu recomendo usar uma solução mais simples com backup

    
por 12.07.2017 / 15:33
0

Se for apenas o nome pelo qual você identifica qual diretório deve ser mantido, você poderá fazer o seguinte:

cd container_dir && \
find . -maxdepth 1 -type d ! -name . ! -name keep_this_dir -exec rm -r {} +

Ou seja, mude para o diretório contêiner e inicie um find de lá, mas somente até níveis de profundidade de 1 e pesquise apenas entre diretórios nesse nível. Deste conjunto de diretórios que find adquire, mantenha apenas dois, ou seja, o container_dir e o keep_this_dir. Resto tudo para ser abatido.

    
por 12.07.2017 / 15:49