Dateien mit bestimmten Mustern in Linux mit Wildcards kopieren

LinuxBeginner
Jetzt üben

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:

  1. Dateien nach Typ identifizieren und kategorisieren
  2. Ein Backup wichtiger Dateien erstellen
  3. 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:

  1. Verwenden von grundlegenden Wildcards (*,?,[ ]) zum Abgleichen von Dateimustern
  2. Kopieren von Dateien mit bestimmten Erweiterungen oder Namensmustern
  3. Verwenden von erweiterten Wildcard-Techniken für eine präzisere Dateiauswahl
  4. Kombinieren mehrerer Wildcards und Brace Expansion für komplexe Muster
  5. 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.