Erweiterte Wildcard-Techniken
Nachdem Sie die Grundlagen gemeistert haben, wollen wir einige fortgeschrittenere Wildcard-Muster untersuchen, um spezifischere Dateioperationen durchzuführen.
Erstellen eines neuen Verzeichnisses für erweiterte Operationen
Zuerst erstellen wir ein neues Verzeichnis, um erweiterte Techniken zu üben:
cd ~/project/wildcards_lab
mkdir advanced
Verwenden von Zeichenklassen mit eckigen Klammern
Zeichenklassen ermöglichen es Ihnen, ein einzelnes Zeichen aus einer Menge von Zeichen abzugleichen:
## Dateien kopieren, die entweder mit 'd' oder 'f' beginnen
cp [df]*.* advanced/
Dies kopiert alle Dateien, die entweder mit 'd' oder 'f' beginnen, in das Verzeichnis "advanced". Überprüfen wir dies:
ls advanced/
Ausgabe:
data_01.csv data_02.csv data_03.csv doc1.pdf doc2.pdf file1.txt file2.txt file3.txt
Verwenden der Negation in Zeichenklassen
Sie können das Symbol ! oder ^ nach der öffnenden Klammer verwenden, um die Zeichenklasse zu negieren. Kopieren wir Dateien, die nicht mit 'r' oder 'i' beginnen:
mkdir advanced/filtered
cp [^ri]*.txt advanced/filtered/
Überprüfen wir dies:
ls advanced/filtered/
Ausgabe:
file1.txt file2.txt file3.txt
Kombinieren mehrerer Wildcards
Kombinieren wir verschiedene Wildcards, um spezifischere Muster zu erstellen:
## Dateien kopieren, die mit 'data_0' beginnen, gefolgt von einer einzelnen Ziffer und mit '.csv' enden
cp data_0?.csv advanced/
Überprüfen wir, ob dies unsere CSV-Dateien korrekt kopiert hat:
ls advanced/*.csv
Ausgabe:
advanced/data_01.csv advanced/data_02.csv advanced/data_03.csv
Verwenden von Extended Globbing
Bash bietet erweiterte Globbing-Muster, die leistungsfähiger sind als Standard-Wildcards. Aktivieren Sie zuerst das erweiterte Globbing:
shopt -s extglob
Jetzt können wir Muster wie die folgenden verwenden:
?(pattern): Gleicht null oder einmaliges Vorkommen des Musters ab
*(pattern): Gleicht null oder mehr Vorkommen ab
+(pattern): Gleicht ein oder mehr Vorkommen ab
@(pattern): Gleicht genau ein Vorkommen ab
!(pattern): Gleicht alles außer dem Muster ab
Versuchen wir ein Beispiel:
## Dateien kopieren, die eine Zahl gefolgt von .txt haben
mkdir advanced/numbered
cp +([0-9])*.txt advanced/numbered/
Das Ergebnis könnte leer sein, da unsere ursprünglichen Dateien nicht mit diesem exakten Muster übereinstimmen. Erstellen wir eine Datei, die dies tut:
touch 123file.txt
cp +([0-9])*.txt advanced/numbered/
ls advanced/numbered/
Ausgabe:
123file.txt
Verwenden der Brace Expansion für komplexe Muster
Die Brace Expansion ist nützlich für die Erstellung komplexer Muster:
## Erstellen eines Verzeichnisses für Berichtdateien
mkdir advanced/reports
## Alle Berichtdateien und Konfigurationsdateien kopieren
cp {report*.txt,*.yml} advanced/reports/
Überprüfen wir dies:
ls advanced/reports/
Ausgabe:
config.yml report1.txt report2.txt report_final.txt
Diese erweiterten Techniken helfen Ihnen, präziser bei der Auswahl von Dateien zu sein, wodurch Sie Zeit und Aufwand bei der Verwaltung Ihres Dateisystems sparen. Experimentieren Sie mit Kombinationen dieser Wildcards, um zu sehen, wie sie Ihnen helfen können, Dateien effizienter zu verwalten.