GNU/Linux >> Linux Esercitazione >  >> Linux

Come eliminare più file contemporaneamente in Bash su Linux?

Se desideri eliminare tutti i file i cui nomi corrispondono a un formato particolare, un carattere jolly (modello globale) è la soluzione più semplice. Alcuni esempi:

$ rm -f abc.log.*             # Remove them all
$ rm -f abc.log.2012*         # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]*  # Remove all files from the first quarter of 2012

Le espressioni regolari sono più potenti dei caratteri jolly; puoi alimentare l'output di grep a rm -f . Ad esempio, se alcuni nomi di file iniziano con "abc.log" e alcuni con "ABC.log" , grep ti permette di fare una corrispondenza senza distinzione tra maiuscole e minuscole:

$ rm -f $(ls | grep -i '^abc\.log\.')

Ciò causerà problemi se uno qualsiasi dei nomi di file contiene caratteri divertenti, inclusi gli spazi. Stai attento.

Quando lo faccio, eseguo ls | grep ... comando prima e controlla che produca l'output che voglio -- soprattutto se sto usando rm -f :

$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)

dove !! si espande al comando precedente. Oppure posso digitare freccia su o Ctrl-P e modificare la riga precedente per aggiungere rm -f comando.

Ciò presuppone che tu stia utilizzando la shell bash. Alcune altre shell, in particolare csh e tcsh e alcune vecchie shell derivate da sh, potrebbero non supportare il $(...) sintassi. Puoi usare la sintassi del backtick equivalente:

$ rm -f `ls | grep -i '^abc\.log\.'`

Il $(...) la sintassi è più facile da leggere e se sei davvero ambizioso può essere nidificata.

Infine, se il sottoinsieme di file che desideri eliminare non può essere facilmente espresso con un'espressione regolare, un trucco che utilizzo spesso è elencare i file in un file di testo temporaneo, quindi modificarlo:

$ ls > list
$ vi list   # Use your favorite text editor

Posso quindi modificare il list file manualmente, lasciando solo i file che voglio rimuovere, e poi:

$ rm -f $(<list)

o

$ rm -f `cat list`

(Di nuovo, questo presuppone che nessuno dei nomi di file contenga caratteri divertenti, in particolare spazi.)

Oppure, quando si modifica il list file, posso aggiungere rm -f all'inizio di ogni riga e poi:

$ . ./list

o

$ source ./list

La modifica del file è anche un'opportunità per aggiungere virgolette dove necessario, ad esempio cambiando rm -f foo bar a rm -f 'foo bar' .


Basta usare la selezione su più righe in sublime per combinare tutti i file in una singola riga e aggiungere uno spazio tra ogni nome di file e quindi aggiungere rm all'inizio dell'elenco. Questo è particolarmente utile quando non c'è uno schema nei nomi dei file che vuoi eliminare.

[$]> rm abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28 abc.log.2012-03-29 abc.log.2012-03-30 abc.log.2012-04-02 abc.log.2012-04-04 abc.log.2012-04-05 abc.log.2012-04-09 abc.log.2012-04-10

Bash supporta tutti i tipi di caratteri jolly ed espansioni.

Il tuo caso esatto verrebbe gestito dall'espansione delle parentesi graffe, in questo modo:

$ rm -rf abc.log.2012-03-{14,27,28}

Quanto sopra verrebbe espanso a un singolo comando con tutti e tre gli argomenti, ed equivale a digitare:

$ rm -rf abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28

È importante notare che questa espansione viene eseguita dalla shell, prima di rm è persino caricato.


Usa un carattere jolly (* ) per abbinare più file.

Ad esempio, il comando seguente eliminerà tutti i file i cui nomi iniziano con abc.log.2012-03- .

rm -f abc.log.2012-03-*

Consiglierei di eseguire ls abc.log.2012-03-* per elencare i file in modo che tu possa vedere cosa eliminerai prima di eseguire rm comando.

Per maggiori dettagli vedere la pagina man di Bash sull'espansione del nome file.


Linux
  1. Come eliminare file ENORMI (100-200 GB) in Linux

  2. Come gestire i file di registro utilizzando Logrotate in Linux

  3. Come scrivere file di registro nella RAM usando Log2ram in Linux

  4. Come rinominare più file insieme in Linux usando 3 metodi

  5. Come gzippare tutti o file specifici in Linux

Come eliminare i file elencati in un altro file in Linux

Come visualizzare i file di registro Nginx su Linux

Come visualizzare i file di registro di Apache su Linux

Come rimuovere/eliminare file in Linux usando il comando rm

Come eseguire più comandi Linux contemporaneamente nel terminale Linux

Come eliminare file e directory utilizzando la riga di comando di Linux