Recursively convert filenames to lowercase

recursively [100 directory depth]:


for i in {0..100}; do find . -mindepth $i -maxdepth $i -type d | while read f; do $(cd "$f"; for i in *; do mv "$i" "`echo "$i" | tr [AÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ] [aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz]`"; done > /dev/null 2>&1); done; done

only in the actual directory:


for i in *; do mv "$i" "`echo "$i" | tr [AÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ] [aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz]`"; done > /dev/null 2>&1

ha valaki szebben tudja, ha lehet írja le, ez most csak hirtelen kellett
a rekurzív résszel gond lehet, ha nem lehet bele "cd"-zni az adott mappába, erre megoldás? :)

szerk.:
command that uppercases the first letter of the files:


for i in *; do new=`echo "$i" | sed -e 's/^./\U&/'`; mv "$i" "$new"; done

Hozzászólások

for i in `find * -depth`; do (mv $i `echo $i | sed 's%[^/][^/]*$%%'``echo $i | sed 's!.*/!!' | tr [:upper:] [:lower:]`); done

convmv --lower -r

meg

tr -s [A-Z] [a-z]

Hiba 1:
-s opció nem kell, sőt! (ANNA pl ana eredményt ad)
Hiba 2:
paramétereket aposztrófok közé kell tenni, mert nagyot szívsz, ha van a könyvtárban egyetlen darab olyan fájl, aminek csak egyetlen kis- vagy nagybetűből áll a neve. Ekkor ugyanis a shell fájlnévhelyettesítésnek veszi a [xyz] részt.

Groovy 1.7.3-tól:



def rename (it){
    upper = "ABCD"
    lower = "abcd"
    it.tr(upper, lower)

}

new File('.').eachFileRecurse({ file ->

    sp = file.toString().tokenize("/")
    before = sp[-1] 
    after = rename(before)
    sp[-1] = after
    println "${before} renamed to ${after}"
	
    //file.rename(sp.join("/"))
    
})

String#tr

Miert van az, hogy fix. melysegig mesz csak le?
Ha mondjuk megforditod az atnevezes sorrendjet, akkor mire egy konyvtarat atneveznel, mar minden benne szereplo file kesz lenne - szoval nem futsz hibara, nem kell ujra es ujra bejarni.

--
I never let my children watch big band performances on TV. Too much sax and violins. - sickipedia