Ho una directory contenente un gran numero di file. Voglio eliminare tutti i file tranne file.txt . Come faccio?
Ci sono troppi file per rimuovere quelli indesiderati individualmente e i loro nomi sono troppo diversi per usarli * per rimuoverli tutti tranne questo unico file.
Qualcuno ha suggerito di utilizzare
rm !(file.txt)
Ma non funziona. Restituisce:
Badly placed ()'s
Il mio sistema operativo è Scientific Linux 6.
Qualche idea?
Risposta accettata:
POSSIBILE:
find . ! -name 'file.txt' -type f -exec rm -f {} +
rimuoverà tutti i file normali (ricorsivamente, inclusi quelli nascosti) eccetto file.txt . Per rimuovere le directory, cambia -type f a -type d e aggiungi -r opzione per rm .
In bash , per usare rm -- !(file.txt) , devi abilitare extglob:
$ shopt -s extglob
$ rm -- !(file.txt)
(o chiamando bash -O extglob )
Nota che extglob funziona solo in bash e famiglia di conchiglie Korn. E usando rm -- !(file.txt) può causare un Argument list too long errore.
In zsh , puoi usare ^ per negare il pattern con extendedglob abilitato:
$ setopt extendedglob
$ rm -- ^file.txt
o usando la stessa sintassi con ksh e bash con le opzioni ksh_glob e no_bare_glob_qual abilitato.