PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : großbuchstaben in kleine umwandeln



wer_ner
03-08-2001, 09:06
Hi,
hat jemand eine Lösung, wie man alle Dateien und Verzeichnisse ab einem Ausgangsverzeichnis von Großbuchstaben in Kleinbuchstaben umwandeln kann?
Bräuchte dringend eine lösung.
Grüße,
Werner :rolleyes:

mrwatchdog
03-08-2001, 09:59
Um die Dateien und Verzeichnisnamen im aktuellen Verzeichnis in Kleinbuchstaben umzubenennen, brauchst Du nur eine kleine FOR-Schleife aufzubauen:

for f in * ; do n=`ls $f | tr [:upper:] [:lower:]`; mv $f $n; done

Wie das rekursiv geht, weiß ich nicht.

Gruß
Mr. Watchdog

mightymike99
03-08-2001, 14:39
Hi,

renamfiles:
<code>
for f in $1/* ; do n=`echo $f | tr [:upper:] [:lower:]`; mv $f $n; done
</code>

ein ls ist nicht notwendig "echo" tut's auch, ansonsten noch das $1 für einen anzugebenden Verzeichnisnamen vor den * und gut is.

ansonsten das zeugs noch in einen find-befehl und fertig:

<code>
find /base-dir -type d -exec renamefiles {} \;
</code>
wobei die geschweiften Klammern für das Suchergebnis stehen.

Gruß Tobias

[ 03. August 2001: Beitrag editiert von: mightymike99 ]

jgbauman
03-08-2001, 14:40
mmv -r \* \#l1
macht alles innerhalb eines Directories zu lowercase.
noch Rekursion dazu:

#! /bin/bash

function tolower() {
pushd . > /dev/null
cd $1
mmv -r \* \#l1
DIRS=`find . -mindepth 1 -maxdepth 1 -type d`
for I in $DIRS; do
tolower $I
done
popd > /dev/null
}

DIR=${1:-./}
test -d $DIR &#0124;&#0124; {
echo "$DIR is no directory">&2
exit 1
}

Synopsis:
skript [dir]

wer_ner
05-08-2001, 07:19
Hallo,
vielen Dank an Euch für Eurere Vorschläge.
Leider konnte ich keine Lösung verwenden, da es mit allen irgendwie Probleme gab.
Ich möchte aber gerne ein kleines Script haben, da ich ich denke, daß mir das Problem in Zukunft noch öfter unterkommen wird. (Ausgelöst war es durch das Kopieren von Dateien von CD auf die Festplatte über Sambaanbindung. Dadurch wurden Kateien von klein auf gross umgeschrieben. Vielleicht auch ein Problem in den Sambaeinstellungen :-) )

mightymike99:

ich habe die for-schleife in die klammern gesetzt, bekomme dann aber sofort Fehler "die sich in der Nähe von "do" befinden. Wo der Syntaxfehler ist, konnte ich nicht finden. Ich habe leider noch zuwenig Prog-erfahrung.

jgbauman:
leider bin ich mit Deinem Vorschlag überhaupt nicht weitergekommen. könnte es sein, daß da ein Schreibfehler ist (DIR und DIRS) und das die Reihenfolge irgendwie nicht stimmt. Innnerhalb der Funktion wird die Funktion aufgerufen, aber (für mich) nirgendwo die Funktion :-) . Wenn´s doch stimmt, wäre ich Dir für ein paar Hilfestellungen dankbar.


Nun zu den allgemeinen Problemen, die ich feststellte:

Wenn man die Direktories umbenennt, tritt das Problem auf, daß z.B. bei /test/BlaB/TestT, zuerst das BlaB nach blab umbenannt wird, dann aber das TestT nicht mehr gefunden wird, weil eben BlaB nicht mehr existiert.

Ich habe in meiner Not nun mein Script mehrfach aufgerufen, aber das ich ja auch nicht so toll.

Mein Scipt:

#!/bin/ksh

#find . -type d -exec renamefiles { for f in $1/* ; do n=$(echo $f | '[:upper:]' '[:lower:]'); mv $f $n; done } \;
#find . -type d -exec renamefiles { for f in $1/* do n=$(echo $f); mv $f $n; done } \;

for f in $(find . -type d)
do
n=`echo $f | tr [:upper:] [:lower:]`
mv $f $n
done


Habt Ihr noch Ideen?

Bis dann,
Werner

jgbauman
05-08-2001, 13:54
Sorry, da ist wohl beim copy&amp;paste die letzte Zeile verloren gegangen:
tolower $DIR

thenktor
20-09-2001, 15:41
ich weiß ja nicht ob's dir noch hilft, aber bei
freshmeat (http://www.freshmeat.net) gibts ein skript das genau das macht was du brauchst. such mal nach lowercase. du findest dann ein skript namens rename.

wer_ner
21-09-2001, 10:04
Hallo,
ich habe mir das Script runtergeladen,
nur sagt mein System, das es es nicht finden kann.

Aufruf als root ./rename

ska-cd2:~/batches/gross-kleinschreibung # ./rename
bash: ./rename: No such file or directory
ska-cd2:~/batches/gross-kleinschreibung #

Weiß Du was ich falsch mache?
Grüße,
Werner

stieler
21-09-2001, 23:01
Hallo,

also bei mir geht's


ls * | ./rename

rename liest von stdin.

Aber rekursiv die Dateien in Unterverzeichnissen umzubenennen scheint nicht zu gehen.

Gruß -

Dirk

[ 21. September 2001: Beitrag editiert von: Dirk S. ]

[ 21. September 2001: Beitrag editiert von: Dirk S. ]

Toro
24-09-2001, 23:52
Hallo!
Versuche es mal damit:


#!/bin/sh
# Dieses Script Kopiert Dir eine CD in ein bestimmtest Zieldirectory und
# macht einen tr von Gross auf klein Buchstaben
#M.f.G. TORO
echo "Mountpoint of CD? \c"; read CD
echo "Target Directory? \c"; read DIR
echo "Waiting ...."
set -x
cd $CD
cp -r * $DIR
cd $DIR
chmod -R 755 * #brauchst Du vielleicht nicht
cd $DIR
for j in `find $DIR -type d -depth -print`
do
cd $j
for i in `ls`
do
mv $i `echo $i | tr "[A-Z]" "[a-z]"`
done
done
set +x
#END END END

thenktor
28-10-2001, 13:45
hab noch was gefunden: chcase (http://freshmeat.net/projects/chcase/)