Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
latenite
- Beiträge: 688
- Registriert: 14.05.2007 01:04:23
Beitrag
von latenite » 15.08.2009 17:39:14
Hallo Leute
ich habe eine ziehmlich tiefe Verzeichnissstrucktur die ich gern mit einem script und regex umbenennen möchte.
Leider schaffe ich es nicht ein mal alles "lowercase" zu machen.
hier meine Ansätze die ich gefunden habe:
Code: Alles auswählen
for f in `find $1 -type d`; do
g=`expr "$f" : '\(.*\)' | tr '[A-Z]' '[a-z]'`
mv "$f" "$g"
done
oder
wie würde man einen Pfad recursiv umbenenen?
z.B. /hieR/liGt/diE/Datei
in
/hier/liegt/die/datei
danke
-
latenite
- Beiträge: 688
- Registriert: 14.05.2007 01:04:23
Beitrag
von latenite » 15.08.2009 18:56:51
hat Jemand ne idee? Wie würdet ihr das machen?
Danke
-
michaels
- Beiträge: 1164
- Registriert: 29.03.2009 18:12:25
Beitrag
von michaels » 15.08.2009 19:49:52
Hm, ich würde mir wohl ein kleines Java-Programm bauen
(da ich für das Suchen des Ausdrucks wahrscheinlich viel länger brauchen würde, als für die paar Zeilen Java-Code)
Was genau möchtest du denn machen?
Einfach alle Verzeichnisse in Lower-Case, oder kommt dann noch etwas?
Gruß
-
latenite
- Beiträge: 688
- Registriert: 14.05.2007 01:04:23
Beitrag
von latenite » 15.08.2009 20:10:47
was da noch kommt, steht in den Sternen.
vom "jedes Wort mit Großbuchstaben beginnen lassen " bis "_ druch -" ersetzen etc....was mir eben grad wichtg ist.
-
michaels
- Beiträge: 1164
- Registriert: 29.03.2009 18:12:25
Beitrag
von michaels » 15.08.2009 20:14:43
Ok, also bringt dir ein kleines Java-Prog auch nichts...
Ach übrigens, das Skript soll auch noch Rechtschreibfehler finden
Gruß
-
ThorstenS
- Beiträge: 2875
- Registriert: 24.04.2004 15:33:31
Beitrag
von ThorstenS » 15.08.2009 22:04:50
eins nach dem anderen!
Installiere das Paket
mmv und dann kann der nachfolgende Befehl alle Ordner und Dateinamen in lowercase umwandeln
Das hier ersetzt ein Leerzeichen durch einen underscore - aber wirklich auch nur eins - also ggfls. mehrfach laufen lassen:
-
latenite
- Beiträge: 688
- Registriert: 14.05.2007 01:04:23
Beitrag
von latenite » 16.08.2009 00:19:02
ok also mmv? aber wie machst du das wenn du alle "-" zu "_" recursiv ändern willst?
recursiv habe ich mmv nicht dazu bewegen können.
danke
-
latenite
- Beiträge: 688
- Registriert: 14.05.2007 01:04:23
Beitrag
von latenite » 16.08.2009 02:47:55
so ungefähr habe ich mir das gedacht...
...funktioniert aber noch nciht richtig.
Code: Alles auswählen
#!/bin/bash
MYNAME=$0
FROM=$1
TO=$2
function list(){
# lists all directories on the current level
for f in `find ./ -type d`; do echo $f; done | cut -d / -f 1,2 | uniq | tail -n +2
}
function rename(){
# renames all directories on this level
# then calls "stepin" which moves on directorylevel deeper
for l in `list`
do
n=`echo $l | sed "s/${FROM}/${TO}/g"`
if [ "$l" != "$n" ];then
echo "RENAMING: " $l " --> " $n
mv $l $n
echo ""
fi
done
stepin
}
function stepin(){
# lists all directories on the current level to "cd" into them
# from here "one level deeper" rename does his job again
echo "stepping in..."
for s in `list`; do echo "next dir is: "$s "it contains"; ls -l $s; done
#for s in `list`; do echo "next dir is: "$s "it contains"; ls -l $s; cd $s; rename; done
}
echo "OLD"; list; echo "OLD_END"
rename
echo "NEW"; list; echo "NEW_END"
die auskommentierte Zeile mit dem "cd" geht nicht... man kann das directory zwar mit ls anzeigen ABER nicht mit cd reinwechseln
Was mache ich da falsch?
Code: Alles auswählen
#for s in `list`; do echo "next dir is: "$s "it contains"; ls -l $s; cd $s; rename; done
Danke
p.s. ich wei snicht ob die rekusion so richtig durchdacht ist (is mein erstes recursives script)?