Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Rautamiekka - 18.09.09 - klo:03.35
-
Ongelmana on siis että minulla on yli 100 tiedostoa joiden nimessä ja tekstissä on täsmälleen
GlobalBan
joka Linuxilla ei ole hyvä asia joka tuli jo testattua kun peliservu heitti erroria, joten on pakko muuttaa se muotoonglobalban
-
Lyhyin tapa on tehdä tuo bashilla, mutta itse tekisin sen Pythonilla:
import os
directory="./dump"
#base,newbase=("svgdump","SvgDump")
newbase,base=("svgdump","SvgDump")
files = os.listdir(directory)
for f in files:
oldname=os.path.join(directory,f)
newname=oldname.replace(base,newbase)
if oldname!=newname:
#print oldname,newname
os.rename(oldname,newname)
Kokeilin tuota dump-hakemistoon, jossa oli erinäinen määrä svgdumpxxx.svg nimisiä tiedostoja. Voit kokeilla ensin että tiedostonnimet menevät oikein vaihtamalla kommentin paikkaa edellisestä:
print oldname,newname
#os.rename(oldname,newname)
-
...ja ehkä tässä tapauksessa voisi olla viisaampi käyttää lower()-funktiota merkkijonon muuntamiseen pieniksi kirjaimiksi, testaamattomana koodina jotenkin näin:
import os
directory="."
for oldname in os.listdir(directory):
newname=oldname.lower()
if newname!=oldname:
oldname=os.path.join(directory,oldname)
newname=os.path.join(directory,newname)
print oldname,newname
#os.rename(oldname,newname)
-
Komentorivillä menee suoraan näin:
for i in * ; do sed -e 's/GlobalBan/globalban/g' $i > `echo $i|sed -e 's/GlobalBan/globalban/g' ` ; done
Ko. komentosarjaskripti pitää siis suorittaa samassa hakemistossa missä tiedostot ovat. Huomaa että tämä komento käy läpi hakemiston jokaisen tiedoston, jos haluat tehdä muutoksen esimerkiksi vain kaikkiin .txt -tiedostoihin niin korvaa tuo alku muotoon
for i in *.txt ; ....
Tässä ei myöskään korvata alkuperäisiä tiedostoja vaan tehdään uudet tiedostot uusilla tiedostonimillä.
Jos esimerkiksi hakemistossa on tiedostot GlobalBan1.txt, GlobalBan2.txt ... GlobalBan100.txt, näitä ei poisteta (eikä niihin kosketa) vaan tehdään kaveriksi tiedostot globalban1.txt, globalban2.txt.... joiden sisällössä on myös nuo GlobalBan-kohdat korvattu pienillä kirjaimilla.
edit. typofixejä