No bash, use extglob para excluir o diretório que você deseja manter :
shopt -s extglob
rm -rf container_dir/!(keep_this_dir)
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
No bash, use extglob para excluir o diretório que você deseja manter :
shopt -s extglob
rm -rf container_dir/!(keep_this_dir)
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
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.
Tags bash files shell-script