Durch ein bloßes Manöver meinerseits habe ich versehentlich ein Verzeichnis mit dem Namen (zum Beispiel) -A erstellt und es schließlich mit Dateien gefüllt.
Ich möchte das besagte Verzeichnis löschen. Ich habe es versucht:
rmdir -- -A
aber es sagt mir dann, dass das Verzeichnis noch Dateien enthält. Und ich kann nicht herausfinden, wie man in das Verzeichnis cd, um besagte Akten zu löschen.
Was soll ich tun, um dieses störende Verzeichnis loszuwerden?
unix
unix-shell
Kate Bertelsen
quelle
quelle
Antworten:
Verwenden Sie - bei jedem Befehl.
quelle
Sie können ./ vor die Datei stellen - auf diese Weise verhält sich rm oder rmdir nicht so, als wäre der Dateiname ein Optionsflag.
Sie können auch die Option ausgeben, mit der rm so verhält, als ob alles nach dem Dateinamen steht und keine weiteren Optionen verarbeitet werden sollen. Es mag funky ältere Versionen von rm geben, die das nicht befolgen, obwohl mein Zoo mit antiken Unixen heutzutage ziemlich klein geworden ist, so dass ich Ihnen nicht sagen kann, welche oder ob es Versionen gibt, die nicht verstehen -.
Sie sollten es sich zur Gewohnheit machen, beim Löschen die ./ vor Namen zu setzen - Sie wissen nie, ob sich in Ihrem Verzeichnis eine Datei mit dem Namen -r oder -rf befindet. Sie könnten sagen, dass Sie immer das verwenden sollten - aber ich finde, dass das ./ natürlicher ist, weil es explizit macht, dass "Ich möchte Dateien in diesem Verzeichnis löschen, nicht, was auch immer * mit glob out passiert"
quelle
Benenne es um und behandle es dann normal:
quelle
rmdir löscht kein Verzeichnis, in dem sich etwas befindet. "rm -rf" wird. rmdir ist wesentlich sicherer als "rm -rf". Moos Antwort ist wahrscheinlich immer noch die beste.
quelle
Der obige Befehl funktioniert bei mir.
quelle
Eine andere Methode wäre das Löschen per Inode (dies funktioniert für Dateien / Verzeichnisse mit anderen Zeichen, die nur mit rm schwer zu löschen sind).
quelle
-exec
entgeht dem Namen nicht und muss es nicht; Das über einen derexec*
Systemaufrufe übergebene Argument ist der tatsächliche Name. Es ist nur die Shell- Eingabe, für die spezielle Zeichen wie ein Semikolon-Sternchen usw. erforderlich sind, damit die Shell den korrekten tatsächlichen Namen (OHNE Anführungszeichen) übergibt. Das heißt, esfind -exec rm -f {}
funktioniert nur für eine Datei, nicht für ein Verzeichnis, das nach diesem Q gefragt wurde.find -exec rm -rf {}
behandelt Verzeichnisse und sogar nicht leere Verzeichnisse, aber überspringenfind
und nur tunrm -rf ./-A
ist viel einfacher.find kann das Verzeichnis folgendermaßen löschen:
quelle
Ich habe versucht, ein Verzeichnis mit dem Namen zu löschen
-p
. @Moos Antwort erreichte das, was ich nicht konnterm ./-p
, was nach einer Google-Suche auf vielen Webseiten allgemein verfügbar ist.Eine andere Methode ist die Verwendung der Inode-Nummer. Ich habe die hier beschriebene Methode angewendet:
https://www.cyberciti.biz/tips/delete-remove-fileses-with-inode-number.html
Kurz gesagt, verwenden Sie die folgenden Befehle:
find
Befehl mit dem-exec rm -irf
Argument für eine Datei oder-exec rm -ifdr
ein Verzeichnis.Stellen Sie sicher, dass Sie die
-f
Option innerhalb des Flags verwenden. Andernfalls beschwert sich bash, dass das Verzeichnis oder die Datei nicht gefunden werden kann.Getestet am:
quelle
rm -d
immer und in der Regel nicht ,-f
wenn sie von Aufrufenfind
, aber Sie müssen-r
für ein Verzeichnis und nicht brauchen es für eine Datei. Selbst wenn korrigiert, ist diese Methode immer noch ungeschickt und minderwertig. Für ein nicht leeres Verzeichnis einfach tunrm -fr ./-p
- das ist r für ein Verzeichnis und f abhängig von den Berechtigungseinstellungen.