Warum nicht auch rm -fR folderpath/*
Ordnerpfad löschen. Wie ich es verstehe Wildcard a*
bedeutet a
oder a
plus eine beliebige Anzahl von Zeichen. Also bedeutet folderpath/*
folderpath/
und folderpath/
plus irgendein Zeichen. Daher sollte der Befehl auch rm -fR folderpath/
ausführen, was dazu führen sollte, dass auch der Ordnerpfad gelöscht wird.Die Verwendung von Platzhalter wie Ordnerpfad/* stimmt nicht mit Ordnerpfad/überein. Warum?
Antwort
Da Sie nur löschen, was im Ordnerpfad ist, bedeutet das "/".
Verwenden
rm -rf folderpath
, wenn Sie es alles weg wollen.
Ich weiß das.Ich will nur wissen warum? Weil rm-fR folderpath/löscht den ganzen Ordner.Warum verhält sich die Wildcard anders für rm? – christoph
Dies ist, weil die Shell versucht, Ihre Platzhalter zu erweitern. Versuchen Sie es mit ls
.
Angenommen, Sie haben einen Ordner aaa
mit zwei Unterordner bbb1
und und jeder von ihnen enthält die Dateien ccc1
und ccc2
. Würde wie folgt aussehen:
└── aaa
├── bbb1
│ ├── ccc1
│ └── ccc2
└── bbb2
├── ccc1
└── ccc2
wir schaffen sie für die Prüfung:
mkdir -p aaa/bbb{1,2}
touch aaa/bbb{1,2}/ccc{1,2}
nun versuchen, was die folgenden Befehle zeigen:
ls aaa # first
ls aaa/ # second
ls aaa/* # third
Der erste Befehl zeigt Ihnen den Inhalt des aaa
, das sind die Ordner bbb1
und . Der zweite Befehl macht dasselbe.
Aber der dritte Befehl expandiert nach
ls aaa/bbb1 aaa/bbb2
Ja, und es zeigt Sie die Inhalte von bbb1
und erwarten mögen, die beiden Male sind die Dateien ccc1
und ccc2
.
Was ich zeigen wollte: Ihre Shell die *
mit allen Dateien (oder Ordner) in das Verzeichnis gegeben ersetzt (da alle Dateien und Ordner Namen übereinstimmen) und ersetzt die Zeichenfolge aaa/*
von aaa/bbb1 aaa/bbb2
. Aber es tut nicht zu erweitern, denn das würde die /*
wegnehmen.
Die Dokumentation ist in diesem Punkt nicht eindeutig, aber die Pfadnamenerweiterung unterscheidet sich geringfügig von der normalen Mustererkennung. Sobald Sie eine /
übereinstimmen, müssen Sie mindestens einen Eintrag im Verzeichnis übereinstimmen, bevor das Muster als Ganzes als übereinstimmend betrachtet werden kann. Obwohl das Muster /foo/*
dem String/foo/
entspricht, entspricht es nicht dem Pfad/foo/
.
Eine mögliche Interpretation ist, dass /foo/*
Dateien in /foo/
ist passend, und wenn es keine Dateien sind, schlägt das Spiel.Ich möchte diese Interpretation besser aber, wenn
shopt -s dotglob
ls /foo/*
/foo/.
und /foo/..
abgestimmt.
Vielleicht ist der richtige Weg, um darüber nachzudenken, dass Pfadname Expansion eine /
separierten Folge von Mustern betrachtet, von denen jede etwas für das Muster als Ganzes übereinstimmen müssen übereinstimmen.
- 1. Verwendung von HTML5-Platzhalter mit Symfony 1.4
- 2. Warum stimmt^\ s * $ nicht mit MULTILINE überein?
- 3. Warum stimmt die Regex beim Hinzufügen von Gruppen nicht überein?
- 4. Python drucken Ordnerpfad nicht die Quelle
- 5. Warum Text.Regex.Posix = ~ stimmt mit \ d überein?
- 6. Warum stimmt die leere Zeichenfolge nicht als Seq.empty überein?
- 7. Warum symfony erkennt nicht die Route mit Platzhalter
- 8. Warum funktioniert die Verwendung von System.Threading.Timer nicht?
- 9. Python-Subprozess-Platzhalter Verwendung
- 10. Warum stimmt ctypes.addressof() nicht mit id() für ctypes.Structure-Objekte überein?
- 11. Gatling Ordnerpfad von Jenkins geändert
- 12. Scala Verwendung von Unterstrich als Objekt Platzhalter
- 13. Warum stimmt die folgende Dateierweiterung Regex nicht überein?
- 14. ASP.NET MVC 4 Bundle mit Wildcard in Ordnerpfad
- 15. Warum funktioniert die Verwendung von Bereich mit dieser Funktion, aber die Verwendung des Listennamens nicht?
- 16. nicht mit Platzhalter
- 17. Wie bekomme ich einen Ordnerpfad mit Hilfe von Elektronen?
- 18. Warum stimmt eine CSS-Medienabfrage nicht mit meinem Telefon überein?
- 19. Verwendung von Fall, um ein Aggregat mit einem Platzhalter
- 20. Warum stimmt diese RegEx nicht mit dieser Variablen überein?
- 21. C# Service: Wie Benutzerprofil Ordnerpfad
- 22. Warum erscheint der Platzhalter meines Textfelds nicht?
- 23. Wie Ordnerpfad von bekannten Ordner GUID in Delphi erhalten
- 24. regex für benutzerdefinierten Ordnerpfad
- 25. Warum regex_match stimmt nicht mit meiner Regex überein?
- 26. Warum stimmt HttpContext.Request.Url nicht mit dem in der Adressleiste überein?
- 27. Platzhalter nicht mit angular2
- 28. Warum stimmt diese Einfügeanweisung nicht mit der Tabelle überein?
- 29. Warum stimmt diese PHP-Regex nicht mit akzentuierten Zeichen überein?
- 30. Warum stimmt der Typ nicht mit dem Protokoll überein?
Der Platzhalter in diesem Fall ist "Shell Globbing", wobei '*' allem entspricht, _aber nicht ** nichts ** _ - es ist nicht wie '*' in regulären Ausdrücken, die "Null oder mehr" entsprechen ... Der Shell-Glob '*' stimmt nicht mit _zero_ überein. –
Die Pfadnamenerweiterung funktioniert etwas anders als die Mustererkennung. – chepner
@StephenP Das stimmt nicht ganz. 'foo * bar' würde' foobar' entsprechen. – chepner