Ursprungligen inskrivet av e5150
Jag ser en del problem med att göra ett sådans bash-script.
t.ex. om du har:
"/media/music/Britney Spears/some_random_bs_album/Britney Spears - Låttitel.ogg"
så vill du förmodligen att det ska bli:
"/media/music/britney_spears/some/random_bs_album/britney_spears-lattitel.ogg"
..och då måste du ju först skapa den mappen innan du kan flytta/byta namn på själva filen.. och jag har då ingen aning om hur man skulle kunna lyckas med det utan att typ göra någon horribelt awk-uttryck.
(Detta förutsatt att du vill att mapparna ska vara gemener osv. också..)
Ifall alla filer bara ligger i rooten /media/music, så skulle det fungera med något typ:
for filnamn in `ls -1 /media/music/`;do
nyttnamn=$filnamn
for replacewithunderscore in " " "&" "<random skittecken>"; do
nyttnamn=$(echo "$nyttnamn" | sed s/'$replacewithunderscore'/_/)
nyttnamn=$(echo "$nyttnamn"|tr 'A-Z' 'a-z')
Men jag antar att du har någon sorts mappstruktur, vilken blir ett problem. Ifall du har python installerat skulle os.walk() kunna göra hela processen väldigt smidig.
#!/usr/bin/python
import os
def syntax(item):
#gör till gemener:
nn=item.lower()
#specialtecken -> underscore
for uscore in (' ','__',"'",'`',"'",'^','"','¨','(',')','[',']','=',
',',':',';','*','!','@','£','#','¤','$','%','&','{','}'):
nn=nn.replace(uscore,'_')
# åäö->aao
nn=nn.replace('å','a').replace('ä','a').replace('ö','o')
return nn
for root,dirs,files in os.walk('/media/music/',topdown=False):
for name in files: # byt först namnet på filerna
newname=os.path.join(root,syntax(name))
name=os.path.join(root,name)
os.rename(name,newname)
for name in dirs: # sedan på mapparna
newname=os.path.join(root,syntax(name))
name=os.path.join(root,name)
os.rename(name,newname)