# Frage an Shell-Akrobaten



## linux_ (30. Dezember 2009)

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_


----------



## Navy (30. Dezember 2009)

Bash:

```
for i in $(find $SOURCEPATH -name "*.jpg" -type f) ; do cp $i $DESTINATION; done
```


----------



## OnlyFoo (16. Februar 2010)

Funktioniert auch gut mit Leerzeichen im Namen

```
find "$SOURCEPATH" -name "*.jpg" -type f | while read LINE ; do
   cp $LINE $DESTINATION
done
```


----------



## deepthroat (16. Februar 2010)

Oder eben mit xargs, wobei diese Variante auch funktioniert falls Newlines im Namen sind:

```
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.


----------



## Raubkopierer (16. Februar 2010)

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:


```
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


----------



## deepthroat (16. Februar 2010)

Raubkopierer hat gesagt.:


> 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:
> 
> 
> ```
> ...


... und was nur funktioniert falls es nicht allzu viele Dateien bzw. die Namen der Unterordner nicht so lang sind.

Gruß


----------

