Tente:
cd /opt &&
find . \( \
-path ./etc/config -o \
-path ./etc/nginx -o \
-path ./home -o \
-path ./usr/sbin -o \
-path ./var/mlocate \) -prune -o \( \
-type d -print0 -o -exec rm -f {} + \) |
tr 'cd /opt &&
find . \( \
-path ./etc/config -o \
-path ./etc/nginx -o \
-path ./home -o \
-path ./usr/sbin -o \
-path ./var/mlocate \) -prune -o \( \
-type d -print0 -o -exec rm -f {} + \) |
tr '%pre%\n' '\n%pre%' |
tac |
tr '%pre%\n' '\n%pre%' |
xargs -r0 rmdir
\n' '\n%pre%' |
tac |
tr '%pre%\n' '\n%pre%' |
xargs -r0 rmdir
-prune garante que nem mesmo digitemos esses diretórios ignorados.
Excluímos arquivos não-diretório nos outros diretórios. E deixe os diretórios processarem depois ( tac não produzirá nada até que find termine porque começa com a última linha).
Precisamos passar a lista de diretórios em ordem reversa para rmdir , já que precisamos excluir o conteúdo antes do próprio diretório. Observe que rmdir não excluirá diretórios não vazios.
Geralmente, usamos -depth para processar as folhas antes das ramificações que as contêm, mas não podemos usar -depth com -prune . Pelo mesmo motivo, não podemos usar -delete , pois implica -depth .