GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie lösche ich mehrere Dateien gleichzeitig in Bash unter Linux?

Wenn Sie alle Dateien löschen möchten, deren Namen einer bestimmten Form entsprechen, ist ein Platzhalter (Glob-Muster) die einfachste Lösung. Einige Beispiele:

$ 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

Reguläre Ausdrücke sind mächtiger als Platzhalter; Sie können die Ausgabe von grep füttern bis rm -f . Wenn beispielsweise einige der Dateinamen mit "abc.log" beginnen und einige mit "ABC.log" , grep ermöglicht eine Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung:

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

Dies führt zu Problemen, wenn einer der Dateinamen komische Zeichen enthält, einschließlich Leerzeichen. Seien Sie vorsichtig.

Dabei führe ich ls | grep ... aus Befehl zuerst und prüfen Sie, ob er die gewünschte Ausgabe erzeugt -- insbesondere wenn ich rm -f verwende :

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

wobei !! wird zum vorherigen Befehl erweitert. Oder ich kann Pfeil nach oben oder Strg-P ​​eingeben und die vorherige Zeile bearbeiten, um rm -f hinzuzufügen Befehl.

Dies setzt voraus, dass Sie die Bash-Shell verwenden. Einige andere Shells, insbesondere csh und tcsh und einige ältere, von sh abgeleitete Shells, unterstützen möglicherweise nicht den $(...) Syntax. Sie können die äquivalente Backtick-Syntax verwenden:

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

Die $(...) Syntax ist einfacher zu lesen, und wenn Sie wirklich ehrgeizig sind, kann sie verschachtelt werden.

Wenn schließlich die Teilmenge der Dateien, die Sie löschen möchten, nicht einfach mit einem regulären Ausdruck ausgedrückt werden kann, besteht ein Trick, den ich häufig verwende, darin, die Dateien in einer temporären Textdatei aufzulisten und sie dann zu bearbeiten:

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

Ich kann dann den list bearbeiten Datei manuell, wobei nur die Dateien übrig bleiben, die ich entfernen möchte, und dann:

$ rm -f $(<list)

oder

$ rm -f `cat list`

(Auch dies setzt voraus, dass keiner der Dateinamen komische Zeichen enthält, insbesondere Leerzeichen.)

Oder beim Bearbeiten von list Datei kann ich rm -f hinzufügen an den Anfang jeder Zeile und dann:

$ . ./list

oder

$ source ./list

Das Bearbeiten der Datei ist auch eine Gelegenheit, bei Bedarf Anführungszeichen hinzuzufügen, z. B. das Ändern von rm -f foo bar bis rm -f 'foo bar' .


Verwenden Sie einfach die mehrzeilige Auswahl in Sublime, um alle Dateien in einer einzigen Zeile zusammenzufassen, und fügen Sie zwischen jedem Dateinamen ein Leerzeichen ein, und fügen Sie dann rm hinzu am Anfang der Liste. Dies ist vor allem dann nützlich, wenn die Dateinamen, die Sie löschen möchten, kein Muster enthalten.

[$]> 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 unterstützt alle Arten von Platzhaltern und Erweiterungen.

Ihr genauer Fall würde wie folgt durch Klammererweiterung behandelt:

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

Das obige würde erweitern zu ein einzelner Befehl mit allen drei Argumenten und entspricht der Eingabe von:

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

Es ist wichtig zu beachten, dass diese Erweiterung von der Shell vor rm durchgeführt wird wird sogar geladen.


Verwenden Sie einen Platzhalter (* ), um mehrere Dateien abzugleichen.

Der folgende Befehl löscht beispielsweise alle Dateien, deren Namen mit abc.log.2012-03- beginnen .

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

Ich würde empfehlen, ls abc.log.2012-03-* auszuführen um die Dateien aufzulisten, damit Sie sehen können, was Sie löschen werden, bevor Sie rm ausführen Befehl.

Weitere Einzelheiten finden Sie auf der Bash-Manpage zur Dateinamenerweiterung.


Linux
  1. So löschen Sie RIESIGE (100-200 GB) Dateien in Linux

  2. So schreiben Sie Protokolldateien im RAM mit Log2ram unter Linux

  3. So komprimieren Sie mehrere Dateien unter Linux

  4. So benennen Sie mehrere Dateien gleichzeitig in Linux um

  5. So benennen Sie mehrere Dateien zusammen in Linux mit 3 Methoden um

So löschen Sie Dateien, die in einer anderen Datei unter Linux aufgeführt sind

So zeigen Sie Nginx-Protokolldateien unter Linux an

So zeigen Sie Apache-Protokolldateien unter Linux an

So entfernen/löschen Sie Dateien in Linux mit dem Befehl rm

So führen Sie mehrere Linux-Befehle gleichzeitig im Linux-Terminal aus

So löschen Sie Dateien und Verzeichnisse mit der Linux-Befehlszeile