(13 risposte)
Chiuso 5 anni fa.
Ecco la situazione.
Ho una directory che contiene molti file con estensioni diverse. Voglio eliminare tutti i file tranne uno con un nome specifico.
Questo può essere fatto facilmente usando la GUI selezionando tutto e premendo ctrl e deselezionando il file in questione.
Questo è esattamente quello che voglio, ma come posso farlo dalla riga di comando?
Ad esempio: dirA contiene i seguenti file:
a.txt
b.txt
c.php
d.html
a.db
b.db
e.html
Voglio eliminare tutti i file mantenendo solo il file denominato a.txt
.
Migliore risposta
Sono arrivato con questo semplice comando fantastico:
rm !(a.txt)
Puoi usare ! come una negazione
Prima prova il glob con l'eco, ad es.
echo !(a.txt)
Se non funziona, per bash
potrebbe essere necessario abilitarlo con
shopt -s extglob
Se vuoi mantenere entrambi a.txt
e b.txt
, puoi usare !(a.txt|b.txt)
o !([ab].txt)
.
Modifica:
per fare rm
lavorando in modo ricorsivo basta aggiungere -r
come
rm -r !(a.txt)
e inoltre, funziona con la cartella. devi solo cambiare il nome nel nome della directory, come per a_dir
rm -r !(a_dir)