Einführung
Linux-Wildcards, auch bekannt als Globbing-Muster, sind Sonderzeichen, die in der Shell verwendet werden, um Dateinamen abzugleichen und zu erweitern. Das Verständnis, wie man diese leistungsstarken Werkzeuge einsetzt, kann Ihre Effizienz bei der Arbeit mit der Linux-Kommandozeile erheblich verbessern. Dieses Tutorial führt Sie durch die Grundlagen von Linux-Wildcards und zeigt, wie Sie diese nutzen können, um Dateien mit bestimmten Mustern zu kopieren, was Ihnen hilft, Ihre Dateiverwaltungsaufgaben zu rationalisieren.
Grundlegendes zu Wildcards
In Linux sind Wildcards Sonderzeichen, die Ihnen helfen, mehrere Dateien mithilfe von Mustern abzugleichen. Sie sind besonders nützlich, wenn Sie viele Dateien gleichzeitig verwalten müssen. Lassen Sie uns die gebräuchlichsten Wildcards untersuchen, indem wir die Dateien in unserem aktuellen Verzeichnis betrachten.
Zuerst wollen wir alle Dateien sehen, mit denen wir arbeiten können:
cd ~/project/wildcards_lab
ls
Sie sollten eine Liste von Dateien mit verschiedenen Erweiterungen wie dieser sehen:
backup data_02.csv doc2.pdf file3.txt image3.jpg readme.md
config.yml data_03.csv documents images report1.txt report_final.txt
data_01.csv doc1.pdf file1.txt image1.jpg report2.txt script.sh
file2.txt image2.jpg
Das Asterisk (*) Wildcard
Das Asterisk-Zeichen * ist das gebräuchlichste Wildcard. Es gleicht eine beliebige Anzahl von Zeichen ab (einschließlich null). Sehen wir es in Aktion:
Um alle Textdateien (die mit .txt enden) aufzulisten:
ls *.txt
Sie sollten sehen:
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt
Um alle Bilddateien (die mit .jpg enden) aufzulisten:
ls *.jpg
Ausgabe:
image1.jpg image2.jpg image3.jpg
Das Fragezeichen (?) Wildcard
Das Fragezeichen ? gleicht genau ein Zeichen ab. Lassen Sie uns es verwenden, um Dateien zu finden:
ls file?.txt
Dieser Befehl listet Dateien auf, die mit "file" beginnen, gefolgt von genau einem Zeichen und mit ".txt" enden.
Ausgabe:
file1.txt file2.txt file3.txt
Das eckige Klammern ([]) Wildcard
Eckige Klammern [] ermöglichen es Ihnen, ein einzelnes Zeichen aus einer angegebenen Menge abzugleichen:
ls data_0[1-2].csv
Dieser Befehl listet CSV-Dateien auf, deren Namen mit "data_0" beginnen, gefolgt von entweder 1 oder 2, dann ".csv".
Ausgabe:
data_01.csv data_02.csv
Versteckte Dateien auflisten
In Linux sind Dateien, die mit einem Punkt (.) beginnen, versteckte Dateien. Wir können Wildcards auch verwenden, um sie zu finden:
ls .*
Die Ausgabe enthält:
. .. .hidden_file1 .hidden_file2
Hinweis: Die Zeichen . und .. stehen für das aktuelle Verzeichnis bzw. das übergeordnete Verzeichnis.
Probieren Sie diese Befehle aus und beobachten Sie die Ergebnisse. Das Verständnis dieser grundlegenden Wildcards ist unerlässlich, bevor wir uns der Verwendung für Dateikopiervorgänge zuwenden.
Dateien mit Wildcards kopieren
Nachdem Sie die grundlegenden Wildcards verstanden haben, wollen wir sie verwenden, um Dateien effizient zu kopieren. Die allgemeine Syntax zum Kopieren von Dateien lautet:
cp [options] source_file(s) destination
Lassen Sie uns einige organisierende Verzeichnisse erstellen und das Kopieren von Dateien mit verschiedenen Mustern üben.
Kopieren aller Dateien mit einer bestimmten Erweiterung
Lassen Sie uns alle Textdateien in das Backup-Verzeichnis kopieren:
cd ~/project/wildcards_lab
cp *.txt backup/
Dieser Befehl kopiert alle Dateien, die mit .txt enden, in das Backup-Verzeichnis. Überprüfen wir dies:
ls backup/
Sie sollten sehen:
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt
Kopieren von Dateien, die mit bestimmten Mustern beginnen
Als Nächstes kopieren wir alle Bilddateien in das Verzeichnis "images":
cp image*.jpg images/
Dies kopiert alle Dateien, die mit "image" beginnen und mit ".jpg" enden, in das Verzeichnis "images". Überprüfen wir dies:
ls images/
Ausgabe:
image1.jpg image2.jpg image3.jpg
Kopieren von Dateien mit mehreren Mustern mithilfe der Brace Expansion
Die Brace Expansion {pattern1,pattern2} ermöglicht es Ihnen, mehrere Muster anzugeben. Lassen Sie uns sowohl PDF- als auch CSV-Dateien in das Verzeichnis "documents" kopieren:
cp *.{pdf,csv} documents/
Dieser Befehl kopiert alle Dateien, die entweder mit .pdf oder .csv enden, in das Verzeichnis "documents". Überprüfen wir dies:
ls documents/
Ausgabe:
data_01.csv data_02.csv data_03.csv doc1.pdf doc2.pdf
Kopieren von Dateien mit mehreren Mustern mithilfe von "or" (||)
Wir können auch den Operator || verwenden, um Dateien zu kopieren, die verschiedenen Mustern entsprechen:
cp report*.txt script.sh backup/
Dies kopiert alle Dateien, die mit "report" beginnen und mit ".txt" enden, sowie die Datei "script.sh" in das Backup-Verzeichnis. Überprüfen wir, was sich jetzt im Backup-Verzeichnis befindet:
ls backup/
Aktualisierte Ausgabe:
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt script.sh
Kopieren von Dateien unter Beibehaltung der Attribute
Beim Kopieren von Dateien möchten Sie möglicherweise Attribute wie Zeitstempel und Berechtigungen beibehalten. Verwenden Sie die Option -p:
cp -p config.yml backup/
Um zu überprüfen, ob die Attribute erhalten geblieben sind:
ls -l config.yml
ls -l backup/config.yml
Die Zeitstempel und Berechtigungen sollten für beide Dateien identisch sein.
Experimentieren Sie mit diesen Befehlen und erkunden Sie, wie verschiedene Wildcard-Muster Ihnen helfen, Dateien effizient zu kopieren.
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.
Praktische Datei-Management-Übung
In diesem letzten Schritt werden wir alles, was wir gelernt haben, zusammenfügen, um ein praktisches Datei-Management-Problem zu lösen. Diese Übung wird Ihr Verständnis von Wildcards vertiefen und ihre praktische Anwendung demonstrieren.
Szenario
Stellen Sie sich vor, Sie sind ein Systemadministrator, der für die Organisation eines Verzeichnisses mit verschiedenen Dateitypen verantwortlich ist. Sie müssen:
- Dateien nach Typ identifizieren und kategorisieren
- Ein Backup wichtiger Dateien erstellen
- Dateien basierend auf bestimmten Namensmustern extrahieren
Lassen Sie uns dieses Szenario simulieren:
Erstellen eines simulierten Projektverzeichnisses
Zuerst erstellen wir ein neues Projektverzeichnis mit verschiedenen Dateitypen:
cd ~/project/wildcards_lab
mkdir project_files
cd project_files
## Erstellen Sie verschiedene Dateitypen
touch project_doc_v1.txt project_doc_v2.txt project_doc_final.txt
touch data_2023_01.csv data_2023_02.csv data_2023_03.csv
touch config_dev.yml config_test.yml config_prod.yml
touch backup_script_v1.sh backup_script_v2.sh
touch image001.png image002.png image003.png
touch .project_config .project_log
Überprüfen wir unser Verzeichnis:
ls
Ausgabe:
backup_script_v1.sh config_prod.yml data_2023_02.csv image002.png project_doc_v1.txt
backup_script_v2.sh config_test.yml data_2023_03.csv image003.png project_doc_v2.txt
config_dev.yml data_2023_01.csv image001.png project_doc_final.txt
Hinweis: Die versteckten Dateien (beginnend mit .) erscheinen nicht in der einfachen ls-Ausgabe.
Organisieren von Dateien nach Typ
Erstellen wir nun Verzeichnisse für verschiedene Dateitypen und organisieren wir unsere Dateien:
## Verzeichnisse erstellen
mkdir docs configs scripts data images backups
## Textdokumente in das Verzeichnis "docs" kopieren
cp *doc*.txt docs/
## Konfigurationsdateien in das Verzeichnis "configs" kopieren
cp *.yml configs/
## Skripte in das Verzeichnis "scripts" kopieren
cp *.sh scripts/
## Datendateien in das Verzeichnis "data" kopieren
cp *.csv data/
## Bilder in das Verzeichnis "images" kopieren
cp *.png images/
Überprüfen wir unsere Organisation:
echo "Dokumente:"
ls docs/
echo "Konfigurationen:"
ls configs/
echo "Skripte:"
ls scripts/
echo "Datendateien:"
ls data/
echo "Bilder:"
ls images/
Ausgabe:
Dokumente:
project_doc_final.txt project_doc_v1.txt project_doc_v2.txt
Konfigurationen:
config_dev.yml config_prod.yml config_test.yml
Skripte:
backup_script_v1.sh backup_script_v2.sh
Datendateien:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Bilder:
image001.png image002.png image003.png
Erstellen eines umfassenden Backups
Erstellen wir ein umfassendes Backup, das alle wichtigen Dateien enthält:
## Erstellen Sie ein Backup aller Nicht-Bilddateien
cp !(*.png|*backup*) backups/
## Sehen wir uns an, was sich in unserem Backup-Verzeichnis befindet
ls backups/
Ausgabe:
config_dev.yml config_test.yml data_2023_01.csv data_2023_03.csv project_doc_final.txt project_doc_v2.txt
config_prod.yml data_2023_02.csv project_doc_v1.txt
Finden von Dateien mit bestimmten Mustern
Finden wir nun Dateien, die bestimmten Mustern entsprechen:
## Alle Dateien aus dem Jahr 2023 finden
echo "Dateien aus dem Jahr 2023:"
ls *2023*
## Alle finalen oder Produktionsversionen finden
echo "Finale/Produktionsversionen:"
ls *final* *prod*
## Alle Version 2 Dateien finden
echo "Version 2 Dateien:"
ls *v2*
Ausgabe:
Dateien aus dem Jahr 2023:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Finale/Produktionsversionen:
config_prod.yml project_doc_final.txt
Version 2 Dateien:
backup_script_v2.sh project_doc_v2.txt
Praktische Anwendung: Erstellen eines Bereitstellungspakets
Erstellen wir abschließend ein Bereitstellungspaket, das nur Produktionskonfigurationen und finale Dokumentation enthält:
mkdir deployment_package
cp *prod*.yml *final*.txt deployment_package/
## Überprüfen Sie unser Bereitstellungspaket
ls deployment_package/
Ausgabe:
config_prod.yml project_doc_final.txt
Herzlichen Glückwunsch! Sie haben erfolgreich eine praktische Datei-Management-Übung mit Linux-Wildcards abgeschlossen. Diese Fähigkeiten sind von unschätzbarem Wert für die effiziente Verwaltung von Dateien in einer Linux-Umgebung, die Automatisierung sich wiederholender Aufgaben und die effektive Organisation Ihres Dateisystems.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie Linux-Wildcards effektiv einsetzen können, um Dateien mit bestimmten Mustern zu kopieren und zu verwalten. Sie begannen mit grundlegenden Wildcards wie dem Sternchen (*), dem Fragezeichen (?) und den eckigen Klammern ([]), und gingen dann zu fortgeschritteneren Techniken wie Zeichenklassen, Negation und Extended Globbing über.
Hier sind die wichtigsten Fähigkeiten, die Sie erworben haben:
- Verwenden von grundlegenden Wildcards (*,?,[ ]) zum Abgleichen von Dateimustern
- Kopieren von Dateien mit bestimmten Erweiterungen oder Namensmustern
- Verwenden von erweiterten Wildcard-Techniken für eine präzisere Dateiauswahl
- Kombinieren mehrerer Wildcards und Brace Expansion für komplexe Muster
- Anwenden dieser Fähigkeiten, um Dateien in einem praktischen Szenario zu organisieren und zu verwalten
Diese Fähigkeiten werden Ihre Produktivität bei der Arbeit mit der Linux-Kommandozeile erheblich steigern und es Ihnen ermöglichen, Datei-Management-Aufgaben zu automatisieren und Ihr Dateisystem effizient zu organisieren. Wenn Sie weiterhin mit Linux arbeiten, werden diese Wildcard-Techniken zu unschätzbaren Werkzeugen in Ihren täglichen Abläufen.
Denken Sie daran, dass Übung den Meister macht. Je mehr Sie diese Wildcards in Ihrer täglichen Arbeit verwenden, desto vertrauter und kompetenter werden Sie im Umgang damit.



