Simplesmente use o for
loop do Bash e test
para filtrar os diretórios desejados e o rm -rf
comando para excluir diretórios recursivamente, desta forma:
for x in /path/to/parent/*; do test "$x" != "dir_survive" && rm -rf "$x"; done
Isso itera sobre todos os elementos (arquivos e diretórios) dentro /path/to/parent/
e exclui o elemento recursivamente se seu nome não for igual a dir_survive
. Se o diretório pai for o diretório atual, você poderá escrever apenas *
como caminho.
Se você não tiver certeza e quiser testar quais elementos serão excluídos primeiro sem executar nenhuma ação, basta substituir rm -rf
o comando acima por echo
e ele produzirá apenas os candidatos a exclusão.
Aqui está um exemplo de execução:
$ tree
.
├── dir1
│ ├── subdir1
│ │ ├── file1
│ │ └── file2
│ └── subdir2
│ ├── file1
│ └── file2
├── dir2
│ ├── subdir1
│ │ ├── file1
│ │ └── file2
│ └── subdir2
│ ├── file1
│ └── file2
└── dir_survive
├── subdir1
│ ├── file1
│ └── file2
└── subdir2
├── file1
└── file2
9 directories, 12 files
$ for x in *; do test "$x" != "dir_survive" && rm -rf "$x"; done
$ tree
.
└── dir_survive
├── subdir1
│ ├── file1
│ └── file2
└── subdir2
├── file1
└── file2
3 directories, 4 files