Probleme mit Shell-Script (Listen, Strings, etc.)

S

sideshow

Schönen guten Morgen!

Ich habe leider einige kleine Probleme mit einem Shell-Script - bzw. weiss ich nicht wie ich richtig ansetzen bzw. weiter machen soll...

Hier die Problemstellung:
Ich möchte mit einem Shell-Script (bash im übrigen) einen Ordner durchsuchen lassen. In diesem sollen alle Bilder (sind voraussichtlich .gif, .jpg und .png) erfasst werden. Jetzt müsste ich aus diesen Bildnamen folgenden String zusammensetzen:

Code:
?name[]=bildname1&name[]=bildname2&name[]=bildname3

Dieser String wird dann an ein PHP-Script mittels GET übermittelt und von diesem Script bekomme ich auch wieder einen String zurück, der sieht ungefähr so aus:

Code:
1001#1002#1003

Jetzt müssten die Namen der Bilder aus dem Ordner nach folgendem Schema ersetzt werden:

Code:
bildname1.jpg  -> 1001.jpg
bildname2.gif   -> 1002.gif
bildname3.png -> 1003.png

So, zu guter letzt werden nun die umbenannten Bilder in einen anderen Ordner verschoben.

Soviel zur Aufgabenstellung... Leider hakt es bei mir an vielen Ecken und Enden. In PHP bin ich sehr fit, aber bei Shell-Scripten beisst es dann doch leider aus... :(

Soweit (na ja... recht weit ist das nicht...) bin ich schon:
Code:
# Get local picture files
cmd="echo";
find $transfer_local/$pic_dir/crea2web -name '*.gif' -exec $cmd {} \;

Leider hab ich hier schon das Problem, das ich nur alle Dateien mit Suffix .gif, .jpg und .png auslesen möchte. Das bekomme ich leider nicht hin.

Und mein größtes Problem: wie kann ich den String zusammenbauen?

Ich hoffe, mir kann hier jemand einen Wink in die richtige Richtung geben!

Vielen Dank im Voraus!
sideshow
 
Schönen guten Morgen!

Ich habe leider einige kleine Probleme mit einem Shell-Script - bzw. weiss ich nicht wie ich richtig ansetzen bzw. weiter machen soll...

Hier die Problemstellung:
Ich möchte mit einem Shell-Script (bash im übrigen) einen Ordner durchsuchen lassen. In diesem sollen alle Bilder (sind voraussichtlich .gif, .jpg und .png) erfasst werden. Jetzt müsste ich aus diesen Bildnamen folgenden String zusammensetzen:

Code:
?name[]=bildname1&name[]=bildname2&name[]=bildname3
Die Dateien findest du im einfachsten Fall mit find.
find arbeitet alle Bedingungen von Links nach Rechts ab und kennt logisches und/oder.

Zum Ersten teil ein Beispiel.
Code:
P=/suchpath/
# Alles in ein Array
A=($(find "$P" -type f -iname"*jpg" -o -iname "*gif" -o -iname "*png");
# String-Array für einzelne Elemente
I=0;
S=("");
ST='name[]=';
for i in ${A[*]};do
     if [ $I -eq 0 ];
            then                              #erstes Element=Stringanfang
            S='?'${ST}$(basename $i);
            else 
            S=$S'&'${ST}$(basename $i);
            fi;((I++));
            done; 
# Testausgabe
echo $S
...String zurück, der sieht ungefähr so aus:

Code:
1001#1002#1003

Jetzt müssten die Namen der Bilder aus dem Ordner nach folgendem Schema ersetzt werden:
..
So, zu guter letzt werden nun die umbenannten Bilder in einen anderen Ordner verschoben.


Vielen Dank im Voraus!
sideshow

Du hast nun alle Dateien im Array ${A[*]};
Einfach den Rückgabestring am # splitten und in ein zweites Array füllen.
Stichwort IFS oder eben mit Variablenexpansion.
Code:
${V//#/ }
Ersetzt z.B. alle # durch Leerzeichen in der Variable V; ;)

Nun kannst du über Index von A und Dem zweiten Array iterieren und deine Actionen ausführen.

Das lass ich aber mal für dich übrig.
Willst ja nicht immer fragen müssen gelle. ;)

Schau dir die Manpage zu basename und mv an.
Wie das Array in der Bash erzeugt wird siehst du an meinem Beispiel.

Gruß Wolfgang
PS Ach ja, Leerzeichen im Pfad oder Filename habe ich hier sträflich missachtet, aber find sein -print0 und xargs helfen dir weiter.
 

Ähnliche Themen

Habe da ein Problem was nicht wegbekomme

Zurück
Oben