Verzeichnisse recursiv umbenennen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
latenite
Beiträge: 688
Registriert: 14.05.2007 01:04:23

Verzeichnisse recursiv umbenennen

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

Code: Alles auswählen

find ./ -type d -exec rename 'y/A-Z/a-z/' {} \;
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

Re: Verzeichnisse recursiv umbenennen

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

Re: Verzeichnisse recursiv umbenennen

Beitrag von michaels » 15.08.2009 19:49:52

Hm, ich würde mir wohl ein kleines Java-Programm bauen :D
(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

Re: Verzeichnisse recursiv umbenennen

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

Re: Verzeichnisse recursiv umbenennen

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 :wink:

Gruß

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Verzeichnisse recursiv umbenennen

Beitrag von ThorstenS » 15.08.2009 22:04:50

eins nach dem anderen!
Installiere das Paket Debianmmv und dann kann der nachfolgende Befehl alle Ordner und Dateinamen in lowercase umwandeln

Code: Alles auswählen

 mmv -r "*" "#l1"
Das hier ersetzt ein Leerzeichen durch einen underscore - aber wirklich auch nur eins - also ggfls. mehrfach laufen lassen:

Code: Alles auswählen

mmv '* *' '#1_#2'

latenite
Beiträge: 688
Registriert: 14.05.2007 01:04:23

Re: Verzeichnisse recursiv umbenennen

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

Re: Verzeichnisse recursiv umbenennen

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)?

Antworten