Ausgabe einer For-Schleife weiterverarbeiten

Mr. Brooks

Lt. Commander
Registriert
Aug. 2011
Beiträge
1.441
Hallo,

ich habe hier eine allgemeine Frage zur Shell. In der Vergangenheit stellte sich mir das Problem schon einmal, wie ich das da aber gemacht habe weiß ich nicht. Angenomme ich lasse über eine For-Schleife alle PDF-Dateien eines Ordner in ein Archiv packen.
Code:
for i in *.pdf
do
archiv-programm $1 ordnername.cbz
done

Ark z. B. nimmt (zumindest bei mir) den Ordner in dem die Dateien liegen als Name für das Archiv. Wie kann ich jetzt im gleichen Skript das Ausgabearchiv weiterverarbeiten wenn ich den Name des Archives vorher nicht kenne. Angenommen ich will es umbenennen oder was weiß ich?

Code:
mv originaldatei neue-datei

Könnte ich hier eine Variable anstelle 'originaldatei' einsetzen? Wie müsste ich das anstellen, damit er hier auch die Ausgabeidatei des 1. Befehls bekommt?

Wie gesagt: Hab hier kein konkretes Bsp.
 
Stell Mal ein funktionsfähiges Skript rein.
Der Ordnername lässt sich ja vorher bestimmen.
 
Ich hab ja keines derzeit. Das mit dem Ordnernamen war nur ein Bsp., so geht Ark vor. Andere Archivprogramme machen das evtl. anders, speziell mit der Kommandozeile.

Diser Befehl ist bei KDE voreingestellt

ark --changetofirstpath --add --autofilename zip %F
 
Du verarbeitest in deiner Schleife überhaupt nicht den Input.

i ist deine Variable, da kommen irgendwelche pdf Namen raus, aber du übergibst mit $1 einen leeren Wert, weil das garnicht definiert ist.
 
cd $1
zip -r ../"$1".zip *
move ../"$1" ../"$2"
 
Stype schrieb:
Du verarbeitest in deiner Schleife überhaupt nicht den Input.

i ist deine Variable, da kommen irgendwelche pdf Namen raus, aber du übergibst mit $1 einen leeren Wert, weil das garnicht definiert ist.

Ja richtig. Das ist wie gesagt nur ein Beispiel. Richtig wäre es
Code:
    for i in *.pdf
    do
    archiv-programm $i ordnername.cbz
    done
 
Das Skript im letzten Post würde bei jedem Schleifendurchlauf eine pdf-Datei ins Archiv ordnername.cbz packen (und dabei das im vorherigen Durchlauf erstellte Archiv wahrscheinlich überschreiben).
 
Um auf deine Frage zu kommen, schieb einfach einen Variablennamen vor Schleife den du als archivnamen nimmst:

Code:
Microserver:~ # archiv=test ;for i in 1 2 ; do echo $i $archiv ; done
1 test
2 test
 
Zurück
Oben