Website-Suche

Kopieren Sie bestimmte Dateitypen und behalten Sie dabei die Verzeichnisstruktur in Linux bei


Vor einiger Zeit haben wir gelernt, wie man unter Linux bestimmte Dateitypen von einem Verzeichnis in ein anderes kopiert. Heute werden wir dasselbe tun, aber auch die Verzeichnisstruktur beibehalten. In diesem kurzen Tutorial wird erklärt, wie Sie bestimmte Dateitypen kopieren und dabei die Verzeichnisstruktur in Linux beibehalten. Hier habe ich zwei verschiedene Möglichkeiten angegeben, dies zu tun. Wählen Sie einfach eines aus, das für Sie geeignet ist.

Kopieren Sie bestimmte Dateitypen und behalten Sie dabei die Verzeichnisstruktur in Linux bei

Stellen Sie sich dieses Szenario vor.

Ich habe ein Verzeichnis mit dem Namen "Linux" mit verschiedenen Dateitypen, die in verschiedenen Unterverzeichnissen gespeichert sind. Schauen Sie sich die folgende Verzeichnisstruktur an:

$ tree Linux/
Linux/
├── dir1
│   ├── English
│   │   └── Kina - Can We Kiss Forever.mp3
│   ├── Instrumental
│   │   └── Chill Study Beats.mp3
│   └── Tamil
│       ├── Kannan Vanthu.mp3
│       └── yarenna.mp3
├── dir2
│   ├── file.docx
│   └── Raja Raja Chozan Naan.mp3
├── dir3
│   ├── Bamboo Flute - Meditation - Healing - Sleep - Zen.mp3
│   └── pic.jpg
└── dir4
    ├── Aaruyirae.mp3
    └── video.mp4

7 directories, 10 files

Verzeichnisinhalte mit dem Befehl „tree“ auflisten

Wie Sie in der obigen Verzeichnisstruktur sehen können, verfügt das Verzeichnis Linux über vier Unterverzeichnisse, nämlich dir1, dir2, dir3 > und dir4. Die mp3-Dateien sind über alle vier Unterverzeichnisse verteilt. Jetzt möchte ich alle mp3-Dateien in ein anderes Verzeichnis mit dem Namen "ostechnix" kopieren und außerdem möchte ich die gleiche Verzeichnisstruktur im Zielverzeichnis beibehalten.

Zuerst werden wir sehen, wie man das mit dem Befehl „find“ macht.

Methode 1 – Verwendung der Befehle „find“ und „cp“ oder „cpio“.

Gehen Sie in das Quellverzeichnis:

cd Linux/

Und kopieren Sie alle MP3-Dateitypen mit dem Befehl „find“:

find . -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;

Lassen Sie uns den obigen Befehl aufschlüsseln und sehen, was jede Option bewirkt.

  • find – Befehl zum Suchen von Dateien und Ordnern in Unix-ähnlichen Systemen.
  • Der Punkt (.) – stellt dar, dass wir den Inhalt aus dem aktuellen Verzeichnis kopieren.
  • -iname ‘*.mp3’ – Suche nach Dateien mit der Erweiterung .mp3.
  • -exec cp – Führen Sie den Befehl „cp“ aus, um Dateien vom Quell- ins Zielverzeichnis zu kopieren.
  • --parents – erstellt bei Bedarf die übergeordneten Zwischenverzeichnisse, um die Struktur des übergeordneten Verzeichnisses beizubehalten.
  • \{\} – wird automatisch durch den Dateinamen der Dateien ersetzt, die mit dem Befehl „find“ gefunden wurden. Und die geschweiften Klammern werden in einigen „find“-Befehlsversionen mit Escapezeichen versehen, um sie vor der Erweiterung durch die Shell zu schützen. Sie können {} auch ohne Escape-Zeichen verwenden.
  • ~/ostechnix – Zielverzeichnis zum Speichern der passenden Dateien.
  • \; – zeigt an, dass die auszuführenden Befehle nun abgeschlossen sind und dass der Befehl beim nächsten Treffer erneut ausgeführt werden soll.

Dieser Befehl findet und kopiert alle MP3-Dateien aus dem Verzeichnis ~/Linux in das Verzeichnis ~/ostechnix. Außerdem bleibt die gleiche Verzeichnisstruktur im Zielverzeichnis erhalten.

Sie können es wie unten beschrieben mit dem Befehl „tree“ an beiden Standorten überprüfen.

Verzeichnisinhalte mit dem Befehl „tree“ unter Linux auflisten

Wie Sie in der obigen Ausgabe sehen können, enthält das Zielverzeichnis nur die MP3-Dateien und seine Verzeichnisstruktur ist dieselbe wie die des Quellverzeichnisses.

Wenn Sie dies von einem anderen Ort aus tun, geben Sie wie unten den vollständigen Pfad des Quellverzeichnisses an.

find ~/Linux -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;

Dieser Befehl findet alle Dateien im Speicherort Linux/ und kopiert sie nach ostechnix/~/Linux/.

Kopieren Sie bestimmte Dateitypen und behalten Sie dabei die Verzeichnisstruktur in Linux bei

Wenn die Option --parents nicht funktioniert, können Sie den Befehl „find“ mit dem Befehl „cpio“ kombinieren, um Dateien unter Beibehaltung der Verzeichnisstruktur zu kopieren.

find . -name '*.mp3' | cpio -pdm  ~/ostechnix

Hier,

  • cpio – Befehl zum Kopieren von Dateien in und aus Archiven.
  • -p – Liest eine Liste von Dateinamen aus der Standardeingabe und kopiert sie in das angegebene Verzeichnis.
  • -d – Erstellen Sie bei Bedarf Verzeichnisse.
  • -m – Dateiänderungszeit beibehalten.

Weitere Einzelheiten finden Sie in den Manpages.

man find
man cp
man cpio

Empfohlene Lektüre:

  • So organisieren Sie automatisch ähnliche Dateitypen in bestimmten Ordnern

Methode 2 – Verwendung von Rsync

Rsync ist ein leistungsstarkes Tool, das von/zu lokalen und Remote-Systemen verwendet wird. Führen Sie Folgendes aus, um bestimmte Dateitypen von einem Verzeichnis in ein anderes zu kopieren und dabei die Struktur des übergeordneten Verzeichnisses beizubehalten:

rsync -a -m --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix

Oder,

rsync -a --prune-empty-dirs --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix

Hier,

  • rsync – Remote- (und lokales) Tool zum Kopieren von Dateien.
  • -a – Archivmodus, um fast alles zu bewahren (einschließlich Symlinks, Änderungsdaten, Dateiberechtigungen, Eigentümer usw.)
  • -m, --prune-empty-dirs – leere Verzeichnisse aus dem Quellbaum entfernen. Wenn Sie leere Verzeichnisse einschließen möchten, entfernen Sie einfach diese Option aus dem obigen Befehl.
  • --include="*/" --include="*.mp3" --exclude="*" – Um nur bestimmte Dateien einzuschließen, müssen Sie zuerst diese spezifischen Dateien einschließen und dann alle ausschließen andere Dateien. In unserem Fall haben wir *.mp3-Dateien eingeschlossen und alles andere ausgeschlossen.
  • ~/Linux – Quellverzeichnis.
  • ~/ostechnix – Zielverzeichnis.

Beispielausgabe:

Kopieren Sie bestimmte Dateitypen und behalten Sie dabei die Verzeichnisstruktur mit Rsync unter Linux bei

Weitere Einzelheiten finden Sie in den Manpages.

man rsync

Hoffe das hilft.

Verwandte Artikel