Frage an Shell-Akrobaten

L

linux_

Hallo,

ich habe ein Verzeichnis, in dem viele Ordner sind... In jedem ist z.B. ein Bild... Diese will ich nun alle in einen Ordner kopieren, ohne alles durchklicken zu müssen... Wie stelle ich das an?

Ich hab nur ein paar Bruchstücke im Kopf... Leider bin ich (noch lange) kein Shell Künstler... Ich denke z.B. Xargs wird mir irgendwie weiterhelfen :)

Vielen Dank und Grüße
linux_
 
Bash:
Code:
for i in $(find $SOURCEPATH -name "*.jpg" -type f) ; do cp $i $DESTINATION; done
 
Funktioniert auch gut mit Leerzeichen im Namen
Bash:
find "$SOURCEPATH" -name "*.jpg" -type f | while read LINE ; do
   cp $LINE $DESTINATION
done
 
Oder eben mit xargs, wobei diese Variante auch funktioniert falls Newlines im Namen sind:
Bash:
find "$SOURCEPATH" -type f  -name "*.jpg" -print0 | xargs -0rI '$'  cp '$' "$DESTINATION"
Gruß

PS: man könnte auch -P n angeben um mehrere Prozesse gleichzeitig zu starten.
 
Und wenn es Leute gibt, die sich nicht mit Variablen und noch mehr Programmen als einem rumschlagen möchten gibt es für diesen Fall auch einfach wildcards wie bash sie beherrscht:

Bash:
mv */*.jpg /path/to/destination

Natürlich ist das nur anwendbar wenn der Aufbau der Unterordner entsprechend regelmäßig ist und find somit nicht benötigt wird :)
 
Und wenn es Leute gibt, die sich nicht mit Variablen und noch mehr Programmen als einem rumschlagen möchten gibt es für diesen Fall auch einfach wildcards wie bash sie beherrscht:

Bash:
mv */*.jpg /path/to/destination

Natürlich ist das nur anwendbar wenn der Aufbau der Unterordner entsprechend regelmäßig ist und find somit nicht benötigt wird :)
... und was nur funktioniert falls es nicht allzu viele Dateien bzw. die Namen der Unterordner nicht so lang sind.

Gruß
 
Zurück