Ordnerstruktur kopieren - aber nur bestimmte Dateien

J

Jazzbyte

Mitglied
Thread Starter
Dabei seit
23.08.2004
Beiträge
20
Reaktionspunkte
0
Hallo Leute,

irgendwie brauche ich grad' mal Hilfe bei einem kleinen Shell-Skript.

Aufgabe: Kopieren bestimmter Dateien einer Ordnerstruktur in einen anderen Ordner unter Beibehaltung der Struktur der jeweigen Unterordner. Oder anders ausgedrückt:

Diese Struktur soll kopiert werden:
Ordner Quelle
Datei 1.fla
Datei 1.swf
Datei 2.fla
Datei 2.swf
Unterordner
Datei 3.fla
Datei 3.swf

So soll das Ziel aussehen:
Ordner Ziel
Datei 1.swf
Datei 2.swf
Unterordner
Datei 3.swf

Ich will also die komplette Struktur und nur die SWF-Dateien aus dieser Struktur in einen Zielordner kopieren.

Nun habe ich folgendes Shell-Skript getippert:
rm -d -R ../release
mkdir ../release

cp -R -v ../flash/*.swf ../release
cp ../flash/main.exe ../release
cp ../flash/main.hqx ../release

Soweit so gut. Das Ergebnis ist soweit korrekt, bis auf das die Unterordner von ../flash nicht mitkopiert werden und somit auch die darin enthaltenen Dateien (SWF) nicht. Warum? Ich hab doch -R für cp angegeben :(

Das 2. Problem ist, dass ich versucht habe, den Quellordner und den Zielordner als Variable mit anzugeben, damit ich das Skript bei Bedarf leicht ändern kann:

pathSource=../flash
pathDest=../release

und dann

cp $pathSource/*.swf $pathDest
funktioniert aber nicht :(. Warum?

Viele Fragen auf einmal... aber schon jetzt herzlichen Dank für alle Antworten.

Gruß,
Jazzbyte.
 
cp -R -v ../flash/*.swf ../release
so kopiert der nur auf der ebene von flash alle swf

cp -R -v ../flash/*/*.swf ../release
müsste auch die subdirs erfassen...
aber er legt dann die subdirs von flash nicht an...
 
mmm, gibt's vielleicht 'ne Alternative zu cp?

Das Skript kommt ursprünglich von 'ner DOSe und dort habbich das ganz easy mit xcopy hingestrickt, hab aber unter OS X standardmäßig kein xcopy gefunden und deswegen cp verwendet.
 
Hej,

Du könntest das auch mit rsync machen.

Würde in etwa so aussehen:
Code:
mst@kruemel:~/temp\> ls -al ordner1/*
-rw-rw-r--    1 mst      devel           0 Dec 29 16:25 ordner1/test1.txt
-rw-rw-r--    1 mst      devel           0 Dec 29 15:56 ordner1/test2.txt
-rw-rw-r--    1 mst      devel           0 Dec 29 16:10 ordner1/test5.jpg
-rw-rw-r--    1 mst      devel           0 Dec 29 16:10 ordner1/test6.jpg

ordner1/unterordner1:
total 8
drwxrwxr-x    2 mst      devel        4096 Dec 29 15:56 .
drwxrwxr-x    4 mst      devel        4096 Dec 29 16:25 ..
-rw-rw-r--    1 mst      devel           0 Dec 29 15:56 test3.txt

ordner1/unterordner2:
total 8
drwxrwxr-x    2 mst      devel        4096 Dec 29 15:56 .
drwxrwxr-x    4 mst      devel        4096 Dec 29 16:25 ..
-rw-rw-r--    1 mst      devel           0 Dec 29 15:56 test4.txt
mst@kruemel:~/temp\> rsync -av --exclude=*.jpg  --include=*.txt ./ordner1/ ./ordner2/ 
building file list ... done
./
test1.txt
test2.txt
unterordner1/
unterordner1/test3.txt
unterordner2/
unterordner2/test4.txt

wrote 345 bytes  read 100 bytes  890.00 bytes/sec
total size is 0  speedup is 0.00
Das geht bestimmt noch eleganter, müsstest Dir mal die Manpage zu rsync ansehen.

Ahoi,
./mstone
 
Habe gerade etwas herumgespielt, mit find und tar funktioniert das relativ charmant.
Code:
mst@kruemel:~/temp/ordner1\> find ./ -name '*.txt' | tar c -T - -pmls \
--atime-preserve --same-owner | (cd ../ordner2 ; tar xv)
./test1.txt
./test2.txt
./unterordner1/test3.txt
./unterordner2/test4.txt
Der Backslash dient nur der Lesbarkeit.

Ahoi,
./mstone
 
Sehr geil. Danke für den rsync-Tip.
Das werde ich dann gleich mal ausprobieren und später berichten, wie's bzw. ob's gefunzt hat.
 
Zurück
Oben Unten