Befehle, Konfiguration und Fehler · Übung
Glob-Treffer vor dem Handeln ansehen
Ein Dateinamenmuster spart Tipparbeit. Es kann aber auch mehr Dateien auswählen als beabsichtigt. Die sichere Gewohnheit ist einfach: Treffer vorhersagen, mit einem Auflistungsbefehl ansehen und erst dann dasselbe Muster in einem zustandsändernden Befehl verwenden.
Ein Muster beschreibt Namen
In Bash und zsh erweitert die Shell ein Glob-Muster zu passenden Pfaden, bevor das Programm läuft. PowerShell-Befehle akzeptieren ebenfalls Pfade mit Platzhaltern. Das genaue Verhalten gehört dort jedoch zum PowerShell-Befehl, der den Pfad verarbeitet. Gehe nicht davon aus, dass sich jeder Grenzfall zwischen Shells übertragen lässt.
Das sind die nützlichen Anfängerfälle:
| Muster | Bedeutung in Bash und zsh | Sicherer Rat über Plattformen hinweg |
|---|---|---|
* | Null oder mehr Zeichen | Rechne mit einer breiten Auswahl und sieh die Treffer vorher an. |
? | Genau ein Zeichen | Sieh die Treffer vorher an, weil das PowerShell-Verhalten von Befehl und Provider abhängen kann. |
[abc] | Eines der aufgeführten Zeichen | Behandle Klammermuster als shellspezifisch, bis eine Vorschau sie bestätigt. |
Das Muster data/*.txt wählt Textdateien direkt in data. Es bedeutet nicht „Durchsuche jedes Unterverzeichnis“ und untersucht keine Dateiinhalte. Das Muster data/Ju??.txt hat nach Ju zwei Stellen für jeweils ein Zeichen. Im Arbeitsbereich dieses Kapitels passt es deshalb sowohl zu data/June.txt als auch zu data/July.txt.
Im Übungsarbeitsbereich üben
Beginne mit einem zurückgesetzten Arbeitsbereich von Kapitel 7. Dein Arbeitsverzeichnis ist /workspace, und diese relevanten Pfade existieren bereits:
/workspace
├── data
│ ├── January.txt
│ ├── June.txt
│ ├── July.txt
│ └── summary.csv
└── destination
└── README.txt
Sage zuerst das Ergebnis von data/Ju??.txt voraus. Nutze dann den gezeigten Weg für dein Terminal, um dasselbe Muster anzusehen, zu kopieren und zu prüfen.
Get-ChildItem -Path ./data/Ju??.txt
Copy-Item -Path ./data/Ju??.txt -Destination ./destination
Get-ChildItem -LiteralPath ./destination
PowerShell übergibt Platzhalterpfade an das Cmdlet. Der wichtige Beleg bleibt die Vorschau: Fahre nur fort, wenn sie June.txt und July.txt nennt und keine der beiden anderen Dateien.
ls data/Ju??.txt
cp data/Ju??.txt destination/
ls destination
Bash erweitert das Muster, bevor cp läuft. Vorschau und Kopie verwenden dieselben Zeichen. So kannst du die beabsichtigte Auswahl mit dem Ergebnis vergleichen.
ls data/Ju??.txt
cp data/Ju??.txt destination/
ls destination
Bash erweitert das Muster, bevor cp läuft. Vorschau und Kopie verwenden dieselben Zeichen. So kannst du die beabsichtigte Auswahl mit dem Ergebnis vergleichen.
Erfolg hat drei beobachtbare Teile:
destinationenthältREADME.txt,June.txtundJuly.txt.dataenthält weiterhin die OriginaldateienJune.txtundJuly.txt.Weder
January.txtnochsummary.csvwurde kopiert.
Wenn das Ergebnis abweicht, setze den Kapitelarbeitsbereich zurück und prüfe die Vorschau erneut. Repariere eine zu breite Auswahl nicht durch das Löschen mehrerer Dateien. Zurücksetzen ist der bekannte Wiederherstellungsweg für diese entbehrliche Übung.
Du möchtest jede .txt-Datei direkt in data nach destination kopieren. Welche erste Aktion überträgt die sichere Gewohnheit dieser Lektion am besten?
Du hast ein Muster erst als Frage und dann als Aktion verwendet. Dieselbe Reihenfolge zählt, wenn ein Befehl eine Programmdatei nennt: zuerst Arbeitsverzeichnis und Ziel feststellen, dann ausführen.