Frage zu find

D

Der_Wolf

Jungspund
Hallo,

ich habe ein Problem mit find.

Folgende Ausgangssituation. Ich habe ein Verzeichniss welches neben sehr vielen anderen Dateien auch Dateien mit der Endung vid enthält.

Um diese *.vid Dateien in ein allgemeingültiges Videoformat zu überführen sind mehere Schritte nötig.

Einer davon ist aus der *.vid Datei viele *.pgm Dateien zu machen.
Diese *.pgm Dateien werden dann in *.jpeg gewandelt und anschliessen mit mencoder in *.avi gewandelt. Soweit alles super aber in meinem Shellscript will ich nach dem "entpacken" der *.pgm Dateien diese Dateien in *.jpg wandeln

nun zu meiner Frage:

warum funktioniert das nicht:

Code:
find $dir -name "$filename*.pgm"  -print -exec cjpeg -quality 100 {} > {}.jpg \;
$dir = Verzeichniss in dem die *.pgm sind
$filename = filename der vid's ohne endung .vid

wenn ich das ausführe kommt nur eine Datei heraus: {}.jpg die sehr groß ist und nicht viele dateien *.pgm.jpg

mfg

Denny
 
Weil die {} nach dem Redirect nicht als Dateiname aufgelöst wird!

In diesem Fall nutze einfach xargs oder eine PIPE.

Gruß Wolfgang
 
Danke Wolfgang für die schnelle Antwort!

Ich habs jetzt so gelöst:
Code:
for j in `find $dir -name "$filename*.pgm"`; 
        do  
             jpegname=$dir/$(basename $j .pgm).jpg;
             cjpeg -quality 100 $j > ${jpegname}
             rm $j
        done

Das Hauptproblem lag darin dass für jede gefundene Datei von find eine andere Ausgangsdatei von "cjpeg" definiert werden musste.
Ich weiss allerdings nicht wie das mit pipe oder xargs gegangen wäre? Wäre da nicht das gleiche Problem aufgetreten?
 
PIPE:
Code:
find /path -name foo* | while read file;
do 
command $file >$file.ext
done

Und sorry, klar xargs ist hier nicht angebracht.

Gruß Wolfgang
 
Zurück
Oben