Kirjoittaja Aihe: Tietyn tekstinpätkän löytäminen ja auto-muuttaminen toiseen, nimissä ja filuissa  (Luettu 1982 kertaa)

Rautamiekka

  • Käyttäjä
  • Viestejä: 439
    • Profiili
Ongelmana on siis että minulla on yli 100 tiedostoa joiden nimessä ja tekstissä on täsmälleen
Koodia: [Valitse]
GlobalBanjoka Linuxilla ei ole hyvä asia joka tuli jo testattua kun peliservu heitti erroria, joten on pakko muuttaa se muotoon
Koodia: [Valitse]
globalban

snifi

  • Vieras
Lyhyin tapa on tehdä tuo bashilla, mutta itse tekisin sen Pythonilla:
Koodia: [Valitse]
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ä:
Koodia: [Valitse]
    print oldname,newname
    #os.rename(oldname,newname)

snifi

  • Vieras
...ja ehkä tässä tapauksessa voisi olla viisaampi käyttää lower()-funktiota merkkijonon muuntamiseen pieniksi kirjaimiksi, testaamattomana koodina jotenkin näin:

Koodia: [Valitse]
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)

tomageeni

  • Käyttäjä
  • Viestejä: 11
    • Profiili
    • http://sepal.us/~juerkkil/
Komentorivillä menee suoraan näin:
Koodia: [Valitse]
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
Koodia: [Valitse]
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ä
« Viimeksi muokattu: 19.09.09 - klo:02.57 kirjoittanut tomageeni »