0%

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:

MusterBedeutung in Bash und zshSicherer Rat über Plattformen hinweg
*Null oder mehr ZeichenRechne mit einer breiten Auswahl und sieh die Treffer vorher an.
?Genau ein ZeichenSieh die Treffer vorher an, weil das PowerShell-Verhalten von Befehl und Provider abhängen kann.
[abc]Eines der aufgeführten ZeichenBehandle 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.

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:

  1. destination enthält README.txt, June.txt und July.txt.

  2. data enthält weiterhin die Originaldateien June.txt und July.txt.

  3. Weder January.txt noch summary.csv wurde 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.