Ein kleines Script das 2 Funktionen hat.

Post Reply
Message
Author
Michael

Ein kleines Script das 2 Funktionen hat.

#1 Post by Michael »

Hallo zusammen,

ich komme irgendwie nicht weiter.
Nachfolgendes Script soll alle Dateien im Verzeichnis von GROSS- in KLEINSCHRIFT umwandeln.
(Das soll der untere auskommentierte Bereichtun und macht dieses auch)
Der obere Bereich soll aus den Dateinamen alle Blanks entfernen und durch einen "_" Unterstrich ersetzen.

Der obere Bereich funktioniert aber noch nicht und ich hänge nun daran.

Bitte hier um eine kleine Erleuchtung.

Danke im Voraus
Michael

PS Noch ein Hinweis, wenn ich das Script starte, dann scheint es zu laufen, es wirft keine Fehlermeldung aus und beendet auf normale Art. Aber bewirkt hat das Script nichts. ( Wie geschrieben, es geht nur um den oberen Bereich)

#!/bin/bash
DESTPATH=`pwd`
###############################################################################
declare -a BLANK=(`find "$DESTPATH" -type f -maxdepth 1`)
declare -a OHNE=(`find "$DESTPATH" -type f -maxdepth 1 | sed s/" "/_/`)
c=0
while [ "${BLANK[c]}" != "" ]; do
mv -f ${BLANK[c]} ${OHNE[c]}
c=$[ c + 1 ]
done

###############################################################################
#declare -a GROSS=(`find "$DESTPATH" -type f -maxdepth 1`)
#declare -a KLEIN=(`find "$DESTPATH" -type f -maxdepth 1 | tr "[A-Z]" "[a-z]"`)
#c=0
#while [ "${GROSS[c]}" != "" ]; do
# mv -f "${GROSS[c]}" "${KLEIN[c]}" 2>/dev/null
# c=$[ c + 1 ]
#done

###############################################################################

Wie geschrieben, der untere Teil funktioniert, der ober nicht.

User avatar
Sauerlaender
Posts: 34
Joined: 11. Apr 2003 12:57
Location: Sauerland

Re: Ein kleines Script das 2 Funktionen hat.

#2 Post by Sauerlaender »

Hi!

Setz im oberen mv-Befehl auch noch die Anführungszeichen, dann sollte es klappen... (Hab's jetzt aber nicht getestet...)
Gruss vom
Sauerlaender

Michael

Re: Ein kleines Script das 2 Funktionen hat.

#3 Post by Michael »

Hi!

Das hatte ich auch gedacht, aber auch diese Version funktioniert leider nicht.
Da heißt es eben noch ein wenig denken.

Grüße und auch Danke für den Hinweis
Michael



#!/bin/bash
DESTPATH=`pwd`
###############################################################################
###############################################################################
declare -a BLANK=(`find "$DESTPATH" -type f -maxdepth 1`)
declare -a OHNE=(`find "$DESTPATH" -type f -maxdepth 1 | sed s/" "/_/`)
c=0
while [ "${BLANK[c]}" != "" ]; do
mv -f "${BLANK[c]}" "${OHNE[c]}"
c=$[ c + 1 ]
done

Michael

Re: Ein kleines Script das 2 Funktionen hat.

#4 Post by Michael »

Hi ich noch einmal.

Die Dateien sind zum Testen und frei erfunden:

ManmsdkjkydlfsdfJKBH HJVBKSF.txt
Matmsdkjky dlfsdfJKBHHJVBKSF.txt
Matnmdkjkydlf sdfJKBHHJVBKSF.txt
Matnmsdkjkydlfs dfJBHHJVBKSF.txt
Matnm sdkjkydlfsdfJKBHHJVBKSF.txt
MatnmsdkjkydlfsdfJKBH HJVBSF.txt
M atnmsdkkydlfsdfJKBHHJVBKSF.txt
Matnmskjk ydlfsdfJKBHHJVBKSF.txt
Matn sdkjkydlfsdfJKBHHJVBKSF.txt
Mtnmsdkjkydlfs dfJKBHHJVBKSF.txt

Jetzt, nachdem ich noch eine Änderung gemacht hatte erhalte ich auch ein schöne Fehlermeldung.
Ich weiß nun warum es nicht geht, aber nicht wie ich es lösen kann.
Die Shell erkennt bei Dateinamen mit BLANK auf 2 Dateien. Das kann man normalerweise mit "" verhindern. Nur wie wende ich es bei obigem Beispiel an???

Grüße
Michael

Fehlermeldung:
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/ManmsdkjkydlfsdfJKBH« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »HJVBKSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/Matmsdkjky« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »dlfsdfJKBHHJVBKSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/Matn« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »sdkjkydlfsdfJKBHHJVBKSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/Matnmdkjkydlf« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »sdfJKBHHJVBKSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/Matnmskjk« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »ydlfsdfJKBHHJVBKSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/M« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »atnmsdkkydlfsdfJKBHHJVBKSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/MatnmsdkjkydlfsdfJKBH« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »HJVBSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/Matnmsdkjkydlfs« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »dfJBHHJVBKSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Verschieben von »/michael/tools/linux/scripte/testen/dateien_anlegen.sh« nach »« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Verschieben von »/michael/tools/linux/scripte/testen/datei_klein.sh« nach »« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/Matnm« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »sdkjkydlfsdfJKBHHJVBKSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »/michael/tools/linux/scripte/testen/Mtnmsdkjkydlfs« nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für »dfJKBHHJVBKSF.txt« nicht möglich: Datei oder Verzeichnis nicht gefunden

Jochen

Re: Ein kleines Script das 2 Funktionen hat.

#5 Post by Jochen »

Das Problem liegt in der declare-Anweisung, weil die Shell dort anhand der Blanks und Newlines die Ausgabe von find aufbricht. Das einfachste ist es wohl, die Ausgabe von find etwas zu massieren:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">declare -a BLANK=( $(find . -type f -maxdepth 1 -printf '"%p"\<!--no-->n') )</font><hr></pre></blockquote>Und das ganze noch mal analog für OHNE. Die printf-Aktion bewirkt, dass jeder Dateiname in "" eingeschlossen wird - voilà! Mehr verrrät die Man-Page zu find unter "-printf".

Jochen

Michael

Re: Ein kleines Script das 2 Funktionen hat.

#6 Post by Michael »

Hi Jochen,

die Sache werde ich heute testen.
Vielen Danke für Deine Hilfe, muss gestehen, dass ich die MAN-PAGES nicht immer vollständig übersetzten kann.
Ich muss einfach noch etwas für die englische Sprache tun.

Grüße
Michael

Michael

Re: Ein kleines Script das 2 Funktionen hat.

#7 Post by Michael »

Hallo Jochen,

das Script funktioniert nun, aber ich habe daraus 2 einzelne gemacht.
Komisch die Sache, zusammen hatte das Script nicht funktioniert, einzeln geht es aber.
Ich habe nun ein Script zus. geshrieben, dass die beiden nacheinander aufruft und dann ausführt.

Grüße
Michael

I. Terator

Re: Ein kleines Script das 2 Funktionen hat.

#8 Post by I. Terator »

<pre>
> c=0
> while [ "${BLANK[c]}" != "" ]; do
> mv -f ${BLANK[c]} ${OHNE[c]}
> c=$[ c + 1 ]
> done
</pre>
Solches kann man doch schöner schreiben!


Irgend etwas mit allen Elementen eines Arrays tun ...
<pre>
## ein TestArray, für UNGLÄUBIGE auch Elemente mit Leerzeichen
arr=( "a x" "b x" "c x" )

## über das Array iterieren
for i in "${arr[@]}"
## irgend etwas
do echo "${i}"
done
</pre>

Falls man doch so eine Art Zählvarable braucht ...
<pre>
c=4
## mal so als Beispiel für die Schreibweise (())
while ((c--)); do
echo ${c}
done
</pre>

I. Terator

Re: Ein kleines Script das 2 Funktionen hat.

#9 Post by I. Terator »

Im Zusammenhang mit der Aufgabenstellung "BLANK" ergibt sich folgender einfacher Ansatz (den Rest wirst Du wohl hinbekommen):
<pre>

for i in *" "*
do
echo "${i}" " -> " "${i// /_}"
done
</pre>

Es wäre interessant zu erfahren, warum jemand Leerzeichen aus Dateinamen entfernen will (und Groß-/Kleinschreibung egalisiert). Gibt es etwa Programme die damit nicht klar kommen?

Post Reply