Não chame rm -rf
. Assim que você executá-lo em um diretório, isso exclui todos os arquivos no diretório e nos subdiretórios, até mesmo os que você deseja manter. Mais geralmente, não chame rm -rf
a menos que você saiba por que um simples rm
não funcionará. Aqui, rm -f
é garantido se você quiser ter certeza de que seu script não solicitará a confirmação para excluir um arquivo somente leitura, mas -r
claramente não é garantido.
Para excluir apenas os arquivos:
find /test* ! -path '/test/folder1/file2.txt' -a ! -path 'test/folder1/subfolder1/file3.txt' -a -exec rm -f {} +
Se você também quiser excluir os diretórios que ficarem vazios, chame rmdir
neles. Use -depth
para que o conteúdo do diretório seja considerado antes do próprio diretório.
find /test* ! -path '/test/folder1/file2.txt' -a ! -path 'test/folder1/subfolder1/file3.txt' -a \( -type d rmdir {} \; -o -exec rm -f {} \; \)
Você receberá erros de rmdir
em execução em diretórios não vazios, eles são irritantes, mas inofensivos.
Se a sua descoberta tiver -delete
e -empty
(por exemplo, encontrar GNU), não será necessário chamar rm
e rmdir
.
find /test* ! -path '/test/folder1/file2.txt' -a ! -path 'test/folder1/subfolder1/file3.txt' -a ! -type d ! -empty -delete