Der Befehl ls -l
gab eine Liste aller Unterverzeichnisse in Ihrem aktuellen Present-Working-Directory (PWD).
Der Befehl rm
kann mehrere Dateien/Verzeichnisse löschen, wenn Sie sie als Liste übergeben.
zB: rm test1.txt test2.txt myApp
werden alle drei der Dateien mit Namen löschen:
test1.txt
test2.txt
myApp
Auch die Fahnen für die rm
Befehl, den Sie verwendet werden, sind häufig in vielen eine Torheit.
rm -f
- Kraft Löschen von Dateien, ohne zu fragen oder
rm -r
bestätigt - Recurse in allen Unterverzeichnissen und löschen alle Inhalte und Unterverzeichnisse
Also, sagen wir, Sie in/home/user sind, und die Verzeichnisstruktur wie folgt aussieht so:
/home/user
|->dir1
|->dir2
`->file1.txt
der ls -l
Befehl wird die Liste zur Verfügung stellen "dir1 dir2 file1.txt"
, und das Ergebnis des Befehls enthält ls -l | xargs rm -rf
wird wie folgt aussehen:
rm -rf dir1 dir2 file1.txt
Wenn wir Ihre ursprüngliche Frage mit dem obigen Beispiel zu erweitern, der letzte Befehl, der an das System übergeben wird wird: rm -rf di1 dir2 file1.txt bark.*
Also, alles im aktuellen Verzeichnis ausgelöscht wird, so dass die bark.*
ist redundant (Sie haben der Maschine effektiv gesagt, dass sie sowieso alles im aktuellen Verzeichnis zerstören soll).
Ich denke, was Sie zu tun gemeint war, alle Dateien im aktuellen Verzeichnis löschen und alle Unterverzeichnisse (recurse), die mit bark.
beginnen, das zu tun, müssen Sie nur noch tun:
find -iname bark.* | xargs rm
Der Befehl über Mittel "finde alle Dateien in diesem Verzeichnis und in den Unterverzeichnissen, ignoriere UPPERCASE/Kleinbuchstaben/mIxEdCaSe, die mit den Zeichen" bark. "beginnen, und lösche sie". Dies könnte immer noch ein schlechter Befehl sein, wenn Sie einen Tippfehler haben. Sie sollten also immer testen, bevor Sie eine Batch-Löschung durchführen.
In Zukunft sollten Sie zuerst eine Liste aller Dateien erstellen, die Sie zuerst löschen möchten, um zu bestätigen, dass es sich um diejenigen handelt, die gelöscht werden sollen.
find -iname bark.* | xargs echo
Dann, wenn Sie sicher sind, löschen Sie diese über
find -iname bark.* | xargs rm
Hoffnung, das hilft. https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6f1dafc8beb84f2ac
Ein automatisiertes Skript läuft so etwas wie rm -rf /usr/local/.........
, aber aufgrund versehentlich ein Leerzeichen einfügen, den Befehl:
Als humoristischer Note, einer der bekanntesten Fälle von „rm -rf“ finden Sie hier wurde rm -rf /usr /local/......
, so bedeutet dies effektiv "löschen Sie alle Root-Ordner, die mit usr oder lokalen beginnen", effektiv das System von jedem, der es nutzt zu zerstören.Ich fühle mich schlecht für diesen Entwickler.
Sie können diese Art von Fehler vermeiden, indem Sie die Saiten zu zitieren, das heißt: rm -rf "/usr/ local/...."
würde eine Fehlermeldung zur Verfügung gestellt haben und diesen Fehler vermieden, da die Anführungszeichen bedeuten, dass alles, was zwischen ihnen den vollständigen Pfad, nicht eine Liste von getrennten Wegen/files (dh: Sie sagen rm, dass die Datei/der Ordner ein Leerzeichen in seinem Namen hat).
Hin und wieder finde ich mich auf Systemen ohne 'finde -print0' und die gepaarten' xargs -0'. Sehr sehr nervig. Ich denke, dass Solaris ein solcher verkrüppelter Kretin sein kann. – tchrist