Wie lösche man mehrere Dateien gleichzeitig in Bash unter Linux?
Habe ich diese Liste von Dateien innerhalb des Linux-server:
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
Ich habe löschen ausgewählt log-Dateien, mit dem Befehl rm -rf
siehe unten:
rm -rf abc.log.2012-03-14
rm -rf abc.log.2012-03-27
rm -rf abc.log.2012-03-28
Gibt es einen anderen Weg, so dass ich löschen Sie die ausgewählten Dateien auf einmal??
InformationsquelleAutor der Frage user1253847 | 2012-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bash unterstützt alle Arten von wildcards und Erweiterungen.
Ihren genauen Fall behandelt werden würde von brace expansionetwa so:
Den oben genannten würde zu erweitern, um einen einzigen Befehl mit allen drei Argumente, und gleichwertig mit der Eingabe:
Es ist wichtig zu beachten, dass diese Erweiterung erfolgt durch die shell, vor
rm
ist auch geladen.InformationsquelleAutor der Antwort unwind
Platzhalter verwenden (
*
), um mehrere Dateien.Beispielsweise den folgenden Befehl löschen Sie alle Dateien mit Namen beginnend mit
abc.log.2012-03-
.Ich würde empfehlen, läuft
ls abc.log.2012-03-*
um die Liste der Dateien, so dass Sie sehen können, was Sie löschen Sie vor dem ausführen derrm
Befehl.Weitere details finden Sie in der Bash man-page auf filename expansion.
InformationsquelleAutor der Antwort dogbane
Wenn Sie möchten, löschen Sie alle Dateien, deren Namen eine bestimmte form, eine wildcard (glob pattern) ist die einfachste Lösung. Einige Beispiele:
Reguläre Ausdrücke sind mächtiger als Platzhalter; Sie können füttern die Ausgabe von
grep
zurm -f
. Zum Beispiel, wenn einige der Dateinamen beginnen mit"abc.log"
und einige mit"ABC.log"
grep
können Sie groß-und Kleinschreibung:Wenn ich das Tue, führe ich das
ls | grep ...
ersten Befehl und überprüfen Sie, dass es erzeugt die Ausgabe, die ich möchte besonders wenn ich mitrm -f
:wo
!!
erweitert, um den vorherigen Befehl. Oder kann ich eine Art Pfeil-nach-oben oder Strg-P und Bearbeiten Sie die Vorherige Zeile, fügen Sie denrm -f
Befehl.Daß man sich mit der bash-shell. Einigen anderen shells, insbesondere csh und tcsh und einige ältere sh-abgeleitet Muscheln, unterstützen möglicherweise nicht die
$(...)
syntax. Sie können verwenden Sie die entsprechende backtick syntax:Den
$(...)
syntax ist einfacher zu Lesen, und wenn Sie wirklich ehrgeizig es können auch verschachtelt werden.Schließlich, wenn die Teilmenge der Dateien, die Sie löschen möchten, die können nicht einfach ausgedrückt mit einem regulären Ausdruck, ein trick, den ich oft verwenden ist, um eine Liste der Dateien in eine temporäre text-Datei, und Bearbeiten Sie ihn:
Kann ich das dann Bearbeiten Sie die
list
- Datei manuell, so dass nur ich die Dateien entfernen möchten, und dann:oder
(Dies setzt Voraus, keiner von den Datei-Namen enthalten, lustige Charaktere, vor allem Leerzeichen).
Oder bei der Bearbeitung
list
Datei, kann ich hinzufügenrm -f
an den Anfang jeder Zeile und dann:oder
InformationsquelleAutor der Antwort Keith Thompson
Einer wild card würde gut funktionieren, aber um sicher zu sein wäre es am besten, um die Verwendung der wild-card-so minimal wie möglich, so etwas entlang der Linien von:
Obwohl von den blicken von ihm, sind diejenigen, die nur einzelne Dateien? Die rekursive option sollte nicht notwendig sein, wenn keines dieser Elemente sind Verzeichnisse, also am besten nicht zu verwenden, die nur für die Sicherheit.
InformationsquelleAutor der Antwort lacrosse1991
Verwenden Sie einfach mehrzeiligen Auswahl in einer erhabenen kombinieren Sie alle Dateien in eine einzige Zeile, und fügen Sie ein Leerzeichen zwischen jeder Datei Namen und dann hinzufügen
rm
am Anfang der Liste. Dies ist vor allem nützlich, wenn es nicht ein Muster in den Dateinamen, die Sie löschen möchten.InformationsquelleAutor der Antwort Andrew Anthony Gerst
Ich bin kein linux-guru, aber ich glaube, Sie wollen, leiten Sie Ihre Liste der output-Dateien zu
xargs rm -rf
. Ich habe etwas verwendet, wie dies in der Vergangenheit mit guten Ergebnissen. Test auf einer Stichprobe Verzeichnis erste!BEARBEITEN - ich könnte missverstanden haben, basierend auf die anderen Antworten, die erscheinen. Wenn Sie Platzhalter verwenden kann, Super. Ich nahm an, dass Ihre ursprünglichen Liste, die Sie angezeigt wurde, von einem Programm generiert, um Ihnen Ihre "Auswahl", so dass ich dachte, Rohrleitungen zu
xargs
wäre der Weg zu gehen.InformationsquelleAutor der Antwort Dave
wenn Sie möchten, löschen Sie alle Dateien gehören in ein Verzeichnis auf einmal. Zum Beispiel; yor-Verzeichnis-Namen "log" und "log" Verzeichnis abc.log.2012-03-14, abc.log.2012-03-15,..... ect-Dateien. Sie haben über das log-Verzeichnis und
rm -rf /log/*
InformationsquelleAutor der Antwort Alican