Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Ein kleines Script das 2 Funktionen hat.

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Michael
Gast





BeitragVerfasst am: 14. Nov 2003 20:00   Titel: Ein kleines Script das 2 Funktionen hat.

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.
 

Sauerlaender



Anmeldungsdatum: 11.04.2003
Beiträge: 34
Wohnort: Sauerland

BeitragVerfasst am: 14. Nov 2003 20:22   Titel: Re: Ein kleines Script das 2 Funktionen hat.

Hi!

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

Michael
Gast





BeitragVerfasst am: 14. Nov 2003 20:28   Titel: Re: Ein kleines Script das 2 Funktionen hat.

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
Gast





BeitragVerfasst am: 14. Nov 2003 20:38   Titel: Re: Ein kleines Script das 2 Funktionen hat.

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
Gast





BeitragVerfasst am: 14. Nov 2003 22:00   Titel: Re: Ein kleines Script das 2 Funktionen hat.

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:
code:
declare -a BLANK=( $(find . -type f -maxdepth 1 -printf '"%p"\n') )
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
Gast





BeitragVerfasst am: 15. Nov 2003 8:31   Titel: Re: Ein kleines Script das 2 Funktionen hat.

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
Gast





BeitragVerfasst am: 15. Nov 2003 15:50   Titel: Re: Ein kleines Script das 2 Funktionen hat.

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
Gast





BeitragVerfasst am: 16. Nov 2003 21:12   Titel: Re: Ein kleines Script das 2 Funktionen hat.


> c=0
> while [ "${BLANK[c]}" != "" ]; do
> mv -f ${BLANK[c]} ${OHNE[c]}
> c=$[ c + 1 ]
> done

Solches kann man doch schöner schreiben!


Irgend etwas mit allen Elementen eines Arrays tun ...

## 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


Falls man doch so eine Art Zählvarable braucht ...

c=4
## mal so als Beispiel für die Schreibweise (())
while ((c--)); do
echo ${c}
done
 

I. Terator
Gast





BeitragVerfasst am: 16. Nov 2003 21:48   Titel: Re: Ein kleines Script das 2 Funktionen hat.

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


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


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?
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy