Hallo Alexander,
Ich möchte alle Dateien von allen Verzeichnissen finden und in ein anderes Verzeichis kopieren und zwar so, dass die Struktur nach dem Kopieren flach ist.
images/a/b/image-s.jpg
images/a/image-as.jpg
images/a/c/image-xy.jpg
Ziel soll dann so aussehen:
images-new/image-s.jpg
images/image-as.jpg
images/image-xy.jpg
wohl eher:
images-new/image-s.jpg
images-new/image-as.jpg
images-new/image-xy.jpg
.... eben flach und mit allen *.jpg Dateien von allen Unterverzeichnissen des "images" Pfades.
Du hast die Stichworte doch selbst genannt, sie stehen sogar in Deinem Thema:
Finden: find
Kopieren: cp
Nun noch beides verbinden und gut ist :-)
Fangen wir damit an:
1. Schritt: Finde die zu kopierenden Dateien
find path/to/images -name *.jpg
Die Standardaktion von find ist, die ermittelte Liste auszugeben. Will man was anderes tun, so nutzt man -exec, gefolgt von dem Kommando, das mit einem Semikolon abzuschließen ist (wobei darauf zu achten ist, dass das Semikolon mit einem Backslash für die Shell maskiert werden muss und davor ein Leerzeichen ist). Auf die einzelnen Fundergebnisse (mit Pfad) wird im Kommando über {} zugegriffen:
2. Schritt
find path/to/images -name *.jpg -exec cp {} path/to/images-new/ ;
und Du hast, was Du suchst: Kopiere mir alle Dateien aus einer bestimmten Verzeichnisstruktur ab einem bestimmten Startverzeichnis in ein Zielverzeichnis, ohne dass dort eine Unterverzeichnisstruktur entsteht.
Du siehst, wir sind mit Finden (find) und Kopieren (cp) ausgekommen.
Mehr zu find findest Du in der umfangreichen Manpage von find: man find.
Bitte beachte, dass bei mehrfach auftretenden Dateinamen, die zuletzt gefundene Datei eine zuvor gefundene mit gleichem Namen überschreibt.
Freundliche Grüße
Vinzenz