Rekursiv Dateien anhand der Dateiendung kopieren…

… und dabei die Verzeichnisstruktur bewahren. Wie geht das eigentlich?
Neulich hatte ich das dringende Bedürfnis, aus einem schier unüberschaubaren Wust an Dateien in hunderten Unterverzeichnissen just jene herauszukopieren, die Quellcode-Dateien waren. Zuerst würde ich hier nun in Schleifen denken und zum Beispiel ein Bash-Script bauen, welches in einigen Zeilen Code die gewünschten Dateien sucht, die passenden Verzeichnisse anlegt, und danach die einzelnen Dateien kopiert. Aber, man ist ja gerne bequem, daher habe ich mich zuerst bei Almighty Google auf die Suche gemacht. Mit den richtigen Suchbegriffen findet man dort recht schnell sehr viele Lösungsansätze. Manche denken so kompliziert wie ich, andere sind schwer zu verstehen, dritte funktionieren schlicht nur in seltsamen Spezialfällen.
Die Perle, die ich gefunden habe, möchte ich hier für die Nachwelt festhalten. Sie ist an Einfachheit und Eleganz kaum zu überbieten, leicht zu merken und zu verstehen:

cd /zu/kopierendes/verzeichnis
find . -name '*.php' | cpio -pdm /pfad/zum/zielverzeichnis

Einfacher geht es nicht. Die Credits dafür gehen an „Iain“ bei StackOverflow

1 comment for “Rekursiv Dateien anhand der Dateiendung kopieren…

  1. Clemens
    11. März 2014 at 1:45

    Oder auch:
    rsync -av --filter='+ */' --filter='+ *.php' --filter='- *' alt/ neu/
    Kopiere die Inhalte von „alt“ in „neu“ (Slashes am Ende sind wichtig, nicht weglassen!), erhalte Symlinks, Berechtigungen, Zeiten, Eigentümer und Gruppe, und special files, kopiere alle Verzeichnisse („+ */“), kopiere alle .php-Dateien, ignoriere alles andere.

Comments are closed.