GNU/Linux >> Linux Esercitazione >  >> Linux

Rimuovere tutti i file/directory tranne un file?

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.


Linux
  1. Come trovare un file in Linux in tutte le directory in modo ricorsivo

  2. Esiste una riga per verificare la presenza di file?

  3. Utilizzare Trova per trovare una determinata directory ed eliminare tutti i file in essa contenuti tranne una directory?

  4. Sposta tutti i file tranne uno

  5. come posso cercare i file e comprimerli in un unico file zip

Comando ls in Linux per elencare i file

Linux:rimuovi le estensioni di file per più file

collegamento simbolico:trova tutti i file che si collegano a questo file

Converti tutte le estensioni di file in minuscolo

Trova directory con tutti i file all'interno più vecchi di X?

Imposta nginx.conf per negare tutte le connessioni ad eccezione di determinati file o directory