-delete
implica -depth
che non funziona -prune
( -depth
inizia con le foglie). C'è un avvertimento al riguardo nel manuale della versione GNU ( -delete
è un'estensione di FreeBSD ora supportata anche da GNU find
e da alcune altre implementazioni).
info find --index-search=-delete
L'uso dell'azione '-delete' sulla riga di comando attiva automaticamente l'opzione '-depth' (* nota trova espressioni: :). Questo può essere sorprendente se in precedenza stavi solo testando con '-print', quindi di solito è meglio ricordare di usare esplicitamente '-depth'.
info find --index-search=-prune
Poiché "-delete" implica "-depth", l'uso di "-prune" in combinazione con "-delete" può comportare la cancellazione di più file di quanto previsto.
Qui hai la possibilità di utilizzare rm
invece:
find . -name save -prune -o -type f -exec rm -f {} +
(potenzialmente non sicuro se ci sono directory scrivibili da altri là dentro, in quanto si potrebbe farti eliminare i file al di fuori della struttura di directory corrente sostituendo le directory con collegamenti simbolici mentre si esegue quel comando).
Un'alternativa più sicura:
find . -name save -prune -o -type f -execdir rm -f -- {} \;
Ciò non ha il problema sopra menzionato ma significa eseguirne uno rm
per file. Il --
è necessario per l'attuazione di FreeBSD, e non la GNU quella che i nomi di file prefissi con ./
.
In alternativa, come suggerito da Costas:
LC_ALL=C find . ! -name save ! -path '*/save/*' -type f -delete
(ma che ancora inutilmente scende nelle save
directory)
Il LC_ALL=C
c'è così *
corrisponde a qualsiasi sequenza di byte (anche quelli che non formano caratteri validi nella localizzazione corrente). Notare che influirà sulla lingua dei messaggi di errore (inglese anziché sulla lingua dell'utente).
mv save/ ../some/safer/location
prima di un comando di eliminazione "generico" (... ma ovviamente prima del tuo post avrei fatto lo stesso controllo e mi sarei imbattuto nello stesso problema!). Ora vai a cercare un buon "undelete" per il filesystem su cui si trovavano i file ^^