Gå til innhold

forandre filnavn på Mange filer


Anbefalte innlegg

jeg har en mappe med masse filer av forskjellige typer og det er ingen "rød tråd" i filnavnene, disse filene har ligget på en win-maskin og det er derfor masse mellomrom i filnavnene på de fleste filene, så jeg lurer på om noen enten har sett et script for å fixe dette automatisk (altså skifte ut mellomrom med understrek i alle filer inni en mappe) eller sitter med kunnskap om hvordan man kan får ordnet det...

 

det er flere hundrevis av filer så det er uaktuelt å gjøre det manuelt...

Lenke til kommentar
Videoannonse
Annonse

Hmm,naaaj. "sed" kjører ikke regex ibrotha :) Du skriver det på en mer bash måte.. ;) Og dessuten /g'en tror jeg heller ikke trengs - det er sånnt du gjør i "vi" - trodde ikke det skulle være nødvendig her..

 

.... Hmm, jeg vil ikke gi ut feil informasjon - la meg teste :>

 

Vel, problemet starter tidligere enn det. Den "for" loopen kutter nemlig variablene inn etter space! Idiotisk... Uansett, jeg prøvde med "ls -b1" som jeg synes burde fungert - men akk nei, den fatter ikke at "\ " er et space, den escaper \ med "\\" og driter i spacet - den tror space er skille-saken...

 

:| Burde jo være en metode for å splitte på "\n" slik normale folk gjør!

Lenke til kommentar

Hmm.. Ja det stemmer.. Space blir loka når man tar en for noe in $(cmd) ...

 

kan kanskje være en idé å lage en filelist:

 

ls mappe > filelist.txt
let i=1
let n=$(wc -l filelist.txt)
while [ "$i" -le "$n" ]; do 
  file=$(head -n $i | tail -n1 )
  mv "$file" "$(echo $file | sed s/\ /_/)"
  let i++
done

echo "Filer endret"

 

Og igjen; dette er bare teori fra min side, men jeg tror denne bør virke (splittingen av filnavn er i det minste løst)

 

btw. hvis du slenger på en -i på mv (e.g. mv -i "$file"....) spør den før den gjør noe

 

EDIT: noen glemte å oppdatere i..

Endret av xeon
Lenke til kommentar
sorry, men du tar feil

 

bash er i grunn sabla samarbeidsvillig:

 

[roger@localhost roger]$ var=$(ls -1 | wc -l)

[roger@localhost roger]$ echo $var

11

[roger@localhost roger]$ if [ "$var" -le 11 ]; then echo yes; fi

yes

Funka ikke på boksen min :S Jeg prøvde :|

 

Edit: jeg prøvde, ikke tenkte! .. Ugh.. :no:

Endret av Velmont
Lenke til kommentar
ls mappe > filelist.txt
let i=1
let n=$(wc -l filelist.txt)
while [ "$i" -le "$n" ]; do 
  file=$(head -n $i | tail -n1 )
  mv "$file" "$(echo $file | sed s/\ /_/)"
  let i++
done

echo "Filer endret"

prøvde den og fikk:

line 3: let: filelist.txt: syntax error in expression (error token is ".txt")

Lenke til kommentar

dropp let da...:

n=$(wc -l filelist.txt)

 

dessuten så må du ha en cd også

 

mappe="Mappe med merkelige filer"

ls "$mappe" > filelist.txt

let i=1

n=$(wc -l filelist.txt)

cd "$mappe"

while [ "$i" -le "$n" ]; do

file=$(head -n $i | tail -n1 )

mv "$file" "$(echo $file | sed s/\ /_/)"

let i++

done

 

echo "Filer endret"

Lenke til kommentar

Tror denne her skal funke - krever at du har python installert (og at den ligger i /usr/bin/python).

Bytt ut /filer med pathen din og hver <tab> med en tabulator.

 

#!/usr/bin/python

import os

from os.path import join

top ="/filer"

for root, dirs, files in os.walk(top, topdown=False):

<tab> for name in files:

<tab><tab> if(name.find("_")>0):

<tab><tab><tab> os.rename(join(root, name),join(root,name.replace("_"," ")))

 

 

Edit: Fordømrade forum som herper identeringen :angry:

Endret av Paull
Lenke til kommentar

Remspace gjør akkuart det du er ute etter - og det i et svingende temop :D

 

Last ned c filen og gjør 'gcc remspace.c -o remspace'

Så går du til katalogen du vil fjerne whitespace i filinanvene i. Gjør

./path/til/remspace

for å se hvilke filer som vil bli renamet. Og:

./path/til/remspace -go

for å rename dem.

den var jo bare genial... :D

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...