PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : script: find and copy



223
04.07.07, 12:54
Hallo,

ich bin ein Script am basteln. Ich möchte alle Dateien rekursiv ab einem bestimmten Pfad zu einem anderen bestimmten pfad kopieren.

Ich bräuchte nun kurz Hilfe beim pipen der gefundenen Dateien. Der Suchbefehl sieht so aus:

find $path/ -type f

Nun möcht ich die Resultate, sprich die Ausgabe von find gleich nutzen um die gefundenen Dateien zu kopieren. Ich stell mir das ungefähr so vor:

find $path/ -type f | cp X $dest/
..wobei X eine einzelne gefundene Datei sein soll.

Nur, was ist X? ..sprich, wie heisst die output variable von find? ;)

shogun
04.07.07, 12:57
Guck Dir mal die Manpage zu Find an.
Es gibt da den schönen Parameter -exec.

Gruß
Thomas

echo
04.07.07, 12:58
hi,
ermstma die virtuelle verhaue.... *G*
---snip---
man find
---snap---
wäre dein freund gewesen...

und weil ich gerade gut drauf bin
---snip---
find $quelle -type f -exec cp {} $ziel \;
---snap---

223
04.07.07, 13:12
Hi,

vielen Dank für die Infos. Ich konnte das nun auch im <man> nachvollziehen.

das nächste mal schau ich besser hin bevor ich hier frage, versprochen !!


danke nochmals & grüsse 223

buzz768
04.07.07, 13:15
Oder so:


find $quelle -type f -print0 | xargs -0 cp -t $ziel

bla!zilla
08.07.07, 10:48
Letzteres ist vor allem dann sinnvoll, wenn es zuviele Dateien werden. Bei -exec wird cp eine Liste von Dateien übergeben. Irgendwann beschwert sich cp das es zuviele Argumente sind. Bei xargs wird für jeden Treffer ein eigener Prozess gestartet. Sicherlich etwas aufwendiger, aber bei vielen tausend Dateien das Mittel der Wahl. Alternativ das Suchergebnis von find mittels tar einpacken und am Ziel wieder auspacken. ;)

zyrusthc
08.07.07, 11:12
Mit einer for Schleife geht es auch.

for a in $(find $path -type f); do cp $a $zielpfad; done;

Greeez Oli

tschloss
09.07.07, 07:49
Hallo,

ich bin ein Script [...]

Das finde ich doch mal klasse, dass sich die problembehafteten Skripte nun hier schon selbst melden und es nicht ihrem ahnungslosen Programmierer überlassen.


Hallo,

ich bin ein Script am basteln[...]
Auch schön, dass dieses Skript sich gerade im Klaren darüber ist, dass es bastelt und die Wege der systematischen Selbstheilung verlassen hat.

- sorry, aber das hat sich so nett angehört -

3qualizer
09.07.07, 16:07
Bei -exec wird cp eine Liste von Dateien übergeben. Irgendwann beschwert sich cp das es zuviele Argumente sind. Bei xargs wird für jeden Treffer ein eigener Prozess gestartet.
Mööp, falsch, grad anders herum.

Mit -exec wird pro gefundener Datei ein Prozess gestartet. Wenn du allerdings xargs verwendest wird alles auf einmal überlegen.
Überprüfen kannst du's z.B. per "ll | xargs echo" ;)