ubuntuusers.de

shell script mit mehreren dateien?

Status: Gelöst | Ubuntu-Version: Server 14.04 (Trusty Tahr)
Antworten |

pfannkuchen

Anmeldungsdatum:
7. Januar 2007

Beiträge: 378

Hey, ich habe hier ien Programm was 2 argumente bekommen einen eingabepfad und einen ausgabepfad. Was muss ich machen, damit das Programm nicht nur einen eingabe parameter nimmt, sondern 2000 durchläuft?

also was ich machen will ist

~/pfad/zum/Programm/programm /anderer/pfad/*.jpg /noch/ein/anderer/pfad/out1-2500.jpg

Ich weis nicht so recht wie ich das machen könnte!

Gruß

Pfannkuchen

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

pfannkuchen schrieb:

Was muss ich machen, damit das Programm nicht nur einen eingabe parameter nimmt, sondern 2000 durchläuft?

also was ich machen will ist

~/pfad/zum/Programm/programm /anderer/pfad/*.jpg /noch/ein/anderer/pfad/out1-2500.jpg

Ich weis nicht so recht wie ich das machen könnte!

Das hängt davon ab, was das Skript machen soll. Am einfachsten übergibst Du die Ausgabe zuerst und nimmst den Rest als Eingaben:

1
2
3
4
out="$1"
shift

wc "$@" >|"$out"

fb@plusq

Avatar von fb@plusq

Anmeldungsdatum:
26. Juni 2015

Beiträge: 60

pfannkuchen schrieb:

Hey, ich habe hier ien Programm was 2 argumente bekommen einen eingabepfad und einen ausgabepfad.

Auf die Gefahr hin, daß ich auf einem Schlauch sitze... aber wie wäre es erstmal mit einer Frage/ Beschreibung, die man auch verstehen kann.

Du HAST schon ein Programm?? Welches? Und was macht das Programm?

Was muss ich machen, damit das Programm nicht nur einen eingabe parameter nimmt, sondern 2000 durchläuft?

Den Quellcode des Programms ändern.

also was ich machen will ist

~/pfad/zum/Programm/programm /anderer/pfad/*.jpg /noch/ein/anderer/pfad/out1-2500.jpg

Ich weis nicht so recht wie ich das machen könnte!

Und dieser Teil sagt mir "du willst Bilddateien woanders hin kopieren, verschieben!?!?!"

Was hat das mit deinem Programm zu tun??

Also bitte mach mal ne genauere Fragestellung, a'la:

"Ich habe einen Ordner mit 2500 Bilder, diese Bilder möchte ich alle durchnummerieren und in einen anderen Ordner kopieren"

So könnte man was damit anfangen, aber Rätselraten iss nich...

pfannkuchen

(Themenstarter)

Anmeldungsdatum:
7. Januar 2007

Beiträge: 378

Hey,

danke für die megaschnelle Antwort! Leider verstehe ich sie nicht so recht ^^. Also ich rufe das Programm so auf:

./th colorize.lua /Users/hannes/Desktop/video_frames/0.jpg out_0.jpg

in dem Ordner video_frames sind 2500 jpgs die alle von 0-2500 durchnummeriert sind. die sollen alle "bearbeitet" werden. und eben outputs von 0-2500 erzeugen.

Könntest du ganz kurz erklären was

1
2
3
4
out="$1"
shift

wc "$@" >|"$out"

macht?

Gruß und vielen Dank schonmal!!

PS.: ich hoffe das ist etwas klarer... sorry für die verwirrende Fragestellung!

pfannkuchen

(Themenstarter)

Anmeldungsdatum:
7. Januar 2007

Beiträge: 378

Ok,

ich hab einen ersten schritt gemacht:

1
for file in ~/Desktop/video/comp/JPEG_EXPORT/*.jpg ; do ./th colorize.lua "$file" "${file#linux_}" ; done

Das hab ich kopiert und die Pfade angepasst. Nur überschreibt er jetzt die daten. :/

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

pfannkuchen schrieb:

Also ich rufe das Programm so auf:

./th colorize.lua /Users/hannes/Desktop/video_frames/0.jpg out_0.jpg

in dem Ordner video_frames sind 2500 jpgs die alle von 0-2500 durchnummeriert sind. die sollen alle "bearbeitet" werden. und eben outputs von 0-2500 erzeugen.

Also, Du willst pro Datei ###.jpg eine Ausgabedatei out_###.jpg erzeugen?

Könntest du ganz kurz erklären was

1
2
3
4
out="$1"
shift

wc "$@" >|"$out"

macht?

Der erste Parameter wird in der Variable "out" gespeichert, dann werden alle Parameter um eine Position nach links verschoben und das Array dieser Parameter wird an wc übergeben, das dann alle Dateien bearbeitet. Das willst Du aber gar nicht.

PS.: ich hoffe das ist etwas klarer... sorry für die verwirrende Fragestellung!

Ja, etwas. Der Hauptpunkt ist aber, dass Du nicht eine Ausgabedatei angeben willst, sondern eine pro Eingabe bzw. Du benötigst für jede Eingabedatei einen Ausgabedateinamen.

pfannkuchen schrieb:

ich hab einen ersten schritt gemacht:

1
for file in ~/Desktop/video/comp/JPEG_EXPORT/*.jpg ; do ./th colorize.lua "$file" "${file#linux_}" ; done

Die Sache mit "#linux_" hast Du garantiert irgendwo abgeschaut. Das geht aber so nicht - sondern viel einfacher:

1
2
3
for file; do
  ./th colorize.lua "$file" "out_$file"
done

Jetzt kannst Du das Skript mit beliebig vielen Dateinamen aufrufen, also z.B. script.sh *.jpg, und dann werden entsprechend Ausgaben produziert.

pfannkuchen

(Themenstarter)

Anmeldungsdatum:
7. Januar 2007

Beiträge: 378

Toll! vielen vielen Dank!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13213

pfannkuchen schrieb:

Toll! vielen vielen Dank!

Da war noch ein Fehler, wenn die Ausgabedateien garantiert im selben Verzeichnis landen sollen:

1
2
3
for file; do
  ./th colorize.lua "$file" "$(dirname "$file")/out_${file##*/}"
done

Übrigens wäre es auch besser, wenn Du in dem Skript die Pfade zu th und colorize.lua absolut machst, damit das Skript immer funktioniert unabhängig davon, wo es aufgerufen wird.

pfannkuchen

(Themenstarter)

Anmeldungsdatum:
7. Januar 2007

Beiträge: 378

Top! danke! btw - wenn jemand mal SW Bilder in Farbe konvertieren will 😉 einfach krass! –> https://github.com/satoshiiizuka/siggraph2016_colorization

Antworten |