Ci sono molte situazioni in cui l'uso di a *
è praticamente inevitabile, ad esempio rm -rf *
in una cartella che contiene migliaia di sottocartelle e file.
Ma cosa succede se si desidera escludere solo uno o due file o cartelle da rm
comando? Ho cercato su Google e ho trovato solo soluzioni abbastanza complicate find . -depth -not \( -name 'one' -o -name 'two' \
-o -name 'three' \) -exec rm {} \;
come indicato qui .
Esiste la possibilità di farlo in un modo più semplice, senza quella deviazione find
? Ad esempio rm -rf --exclude='one' --exclude='two' --exclude='three' *
come in rsync o semplicemente rm -rf -e 'one','two','three' *
?
Forse anche un possibilità generale di escludere le cose da *
(in modo che altri comandi come cp
, mv
, ... non c'è bisogno di implementare il proprio)? Qualcosa del genere *{'one','two','three'}
?
mv -t /tmp one two three && rm -rf * && mv -t . /tmp/one /tmp/two /tmp/three
, ma preferirei una soluzione che dà la possibilità di escludere esplicitamente qualcosa da *
. Ci saranno sicuramente situazioni in cui lo spostamento o la copia dei file in un'altra destinazione non sarà un'opzione.
find
con l'--delete
opzione (non è necessario eseguirerm
per ogni file. Questo è inutile sovraccarico).