linux-l: Skripting (Re: Q: Umwandlung von Dateinamen)

Fabian Walk fabian at narf.in-berlin.de
Fr Okt 16 20:22:49 CEST 1998


On Don, 15 Okt 1998, you wrote:
>Glaub's mir einfach oder probier's aus. Wenn der in der ersten Skriptzeile
>angegebene Interpreter (hier die bash) nicht gefunden wird, erscheint die
>Fehlermeldung, die man naiverweise so interpretiert, dass das Skript nicht
>gefunden wurde. Sehr verwirrend, darum geb' ich diese Erfahrung ja weiter. 

Bei mir ist die bash korrekt installiert und ich benutze sie auch als
Standard-Shell. Das Script lowercase.sh ligt in meinem ~/bin/ Verzeichnis und
ist ausführbar also x-Bit gesetzt.
Ich habe jetzt das lowercase.sh Script etwas erweitert. Wenn ich in
meinem test-Verzeichnis welches folgenden Inhalt hat:
drwx------   2 fabian  users        1024 Oct 16 20:12 ./ 
drwxr-xr-x  25 fabian   users        2048 Oct 16 19:43 ../ 
-rw-r--r--   1 fabian   users          16 Oct 15 22:17 T!eS~T.TxT 
-rw-r--r--   1 fabian   users          16 Oct 16 20:12 TEST.TXT 
-rw-r--r--   1 fabian  users        4913 Sep 10 22:09 dup-sort.txt 

wie folgt das Script starte:
fabian at narf:/home/fabian/test > lowercase.sh /home/fabian/test/ 

passiert gar nichts. Ich bekomme jetzt nichtmal eine Fehlermeldung und die
Dateien im meinem test-Verzeichnis sind unverändert.
Wenn ich hingegen den find Befehl mit allen im Script enthaltenen Parametern,
ohne die -exec und folgende Anweisungen, starte und $1 duch ~/test/
ersetze werden alle Dateien korrekt gefunden.
Wenn ich alles nach -exec starte läuft es tadelos und die statt {} angegebene
Datei wird umgewandelt. 
Sobalt ich aber den gesamten Befehl aus dem Script in der Kommandozeile starte
und nur die Variable $1 duch mein ~/test Verzeichnis ersetze, treten die oben
beschriebenen Symtome auf.
Wie kann ich nun erreichen das es wirklich zusammen in einem Schellscript
funktioniert. 
Anbei mein Script:
#!/bin/bash
# Name    : lowercase
# Datum   : 1998-10-16
# Autor   : Fabian Walk
# Funktion: konvertiert alle mit find gefundenen Dateinamen des als Parameter
#	    übergebenden Verzeichnises in Kleinbuchstaben und entfernt die
#	    Sonderzeichen ~ und !.
#
find $1 -name *"[A-Z]"* -or -name *"\!"* -or -name *"\~"* -exec mv -i {}  \
$(echo {} | sed -e "y/ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ/abcdefghijklmn \
opqrstuvwxyzäöü/" -e "s:[!~]::g") \; 

Bye und Danke
--
Fabian fabian at narf.in-berlin.de



Mehr Informationen über die Mailingliste linux-l