Wenn Sie alle Dateien löschen möchten, deren Namen einem bestimmten Formular 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 leistungsfähiger als Platzhalter. Sie können die Ausgabe von grep
bis füttern rm -f
. Wenn beispielsweise einige der Dateinamen mit "abc.log"
und andere mit beginnen "ABC.log"
, grep
können Sie eine Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung durchführen:
$ rm -f $(ls | grep -i '^abc\.log\.')
Dies führt zu Problemen, wenn einer der Dateinamen lustige Zeichen enthält, einschließlich Leerzeichen. Achtung.
Wenn ich dies tue, führe ich zuerst den ls | grep ...
Befehl aus und überprüfe, ob er die gewünschte Ausgabe erzeugt - insbesondere wenn ich Folgendes verwende rm -f
:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
Dabei wird !!
auf den vorherigen Befehl erweitert. Oder ich kann Aufwärtspfeil oder Strg-P eingeben und die vorherige Zeile bearbeiten, um die hinzuzufügenrm -f
Befehl .
Dies setzt voraus, dass Sie die Bash-Shell verwenden. Einige andere Shells, insbesondere csh und tcsh sowie einige ältere, von sh abgeleitete Shells, unterstützen die $(...)
Syntax möglicherweise nicht . Sie können die entsprechende Backtick-Syntax verwenden:
$ rm -f `ls | grep -i '^abc\.log\.'`
Das $(...)
Syntax ist einfacher zu lesen und wenn Sie wirklich ehrgeizig sind, kann sie verschachtelt werden.
Wenn 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 die list
Datei dann manuell bearbeiten , wobei nur die Dateien übrig bleiben, die ich entfernen möchte, und dann:
$ rm -f $(<list)
oder
$ rm -f `cat list`
(Dies setzt wiederum voraus, dass keiner der Dateinamen lustige Zeichen enthält, insbesondere Leerzeichen.)
Oder wenn list
ich die Datei bearbeite , kann ich rm -f
am Anfang jeder Zeile Folgendes hinzufügen und dann:
$ . ./list
oder
$ source ./list
Bearbeiten der Datei ist auch eine Gelegenheit zitiert , wo nötig hinzuzufügen, zum Beispiel Wechsel rm -f foo bar
zu rm -f 'foo bar'
.