PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rekursiv in Verzeichnissen einen Befehl ausführen?



TheNME123
07-06-2004, 12:11
Hallo alle zusammen,

ich habe folgendes Problem:
Ich möchte in einem Verzeichnisbaum variabler Länge, in jedem Verzeichnis einen Befehl zum konvertieren der darin enthaltenen Dateien ausführen. Am besten wäre ein Shell-Skript was in eines der Verzeichnisse wechselt dort den Befehl ausführt und dessen Beendigung abwartet (ich weiss nicht wieviele Videokonvertierungen eine 733 Mhz Kiste mit 64 MB Ram gleichzeitig schafft ;) ), bevor es mit den anderen Verzeichnissen fortfährt.

Vielen Dank schon mal im Vorraus

Pingu
07-06-2004, 13:11
Hi,

als Tip hätte ich da zwei Befehle/Tools anzubieten, die es in der Kombination bringen könnten: find und xargs

Pingu

TheNME123
07-06-2004, 13:23
Ich hab mir mal die Manpages von xargs angeschaut allerdings wurde ich daraus nicht so recht schlau! Ich habe es auch schon mit find probiert und zwar in der folgenden Art:

#!/bin/sh
for i in (find . -type d)
do
cd $i;convert;cd $home #$home ist platzhalter für das grundverzeichnis
done

Bitte nicht sofort loslachen, bin leider absoluter Anfänger.
Leider gibt mir das Skript überhaupt keine Ausgabe. Deshalb kann ich auch nicht feststellen warum es nicht läuft.

Pingu
07-06-2004, 13:42
Kann das convertierungstool keine Parameter aufnehmen, also welche Datei konvertiert werden soll?

Mit find kann man die Dateien suchen, die konvertiert werden sollen diese Ausgabe gibt man dann an xargs über eine Pipe. nt=courier]xargs[/font] kann dann darus Aufrufparameter für Dein Konvertierungsprogramm machen.

Gehe mal über die Suche rechts oben und suche nach xargs und Du wirst einige Beispiele für die Verwendung finden.

Pingu

peschmae
07-06-2004, 13:49
du müsstest for den () noch ein $ himachen - also for f in $(find ..)

Bei find geht die Sache sonst aber auch in der Art:
find -type d -exec convert {} \;

Wobei {} jeweils durch das gefundene ersetzt wird.

MfG Peschmä

TheNME123
07-06-2004, 14:17
@peschmä

Das Problem an der Sache ist das ich dem Konvertierungstool keine Verzeichnisse als Argumente übergeben kann! Falls ich ein ganzes Verzeichnis umwandeln möchte muss ich das Tool einfach in dem Verzeichnis ausführen. Deshalb funktioniert diese Methode nicht.

@pingu

Danke für den Tip mit xargs! Die Funktionsweise habe ich jetzt soweit verstanden und eigentlich müsste es auch klappen das einzigste Problem was ich jetzt noch habe ist das die Dateinamen auch Leerzeichen enthalten, xargs aber nur die Dateinamen ohne Anführungszeichen ausspuckt. Kann ich daran noch irgendwie etwas ändern?

roli
07-06-2004, 15:00
Guck dir einmal im Thread "Zeile aus Datei auslesen und weiteres... " den Beitrag von peschmä an. Ich vermute mit setzen von IFS sollte es funktionieren.

TheNME123
07-06-2004, 15:28
So ich hab das Problem schließlich gelöst dank eurer Hilfe!
mit "find . -name "*.avi" -print0 |xargs -0 convert" hat er alle Dateien als Liste übernommen trotz Leerzeichen Klammern und anderer Widrigkeiten!

Vielen Dank

Pingu
07-06-2004, 15:30
Wie wäre es dann mit -execdir anstatt von -exec. Also: find -type d -execdir convert \;

Habe ich so gerade unter man find gefunden.

Pingu

peschmae
07-06-2004, 19:24
Wollte schon dankeschön sagen. Aber nix da - das gibts bei mir nicht. :eek:
GNU find Version 4.1.20
Was hast du denn?

MfG Peschmä

Pingu
08-06-2004, 08:23
Hi,

ich weiß nicht welche Version ich habe. Es steht nicht im manual und auch find mag es mir nicht sagen.

Jedenfalls habe ich die BSD Variante, die bei Mac OS X .2.8 dabei ist.

Pingu