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.