magikern Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 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
xeon Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 (endret) mappe="Mappen med filer" for file in $(ls $mappe) ; do cd "$mappe" mv "$file" "$(echo $file | sed s/\ /_/)" done # merk at den ikke er testet og du bør derfor gjøre det på noen ufarlige filer først Endret 28. januar 2004 av xeon Lenke til kommentar
kattemat Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 http://olsr.org/~andreto/remspace.c Lenke til kommentar
iDude Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 mv "$file" "$(echo $file | sed s/\ /_/)" Uten at jeg er 100% sikker tror jeg du må ha sed s/[ ]/_/g i stedet for sed s/\ /_/ "g-en" i etterkant bytter ut alle mellomromene, og jeg trur [ ] er den rette måten å angi mellomrom på i sed. Lenke til kommentar
Velmont Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 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
xeon Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 (endret) 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 28. januar 2004 av xeon Lenke til kommentar
Velmont Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 Nei Scriptet liker ikke wordcount programmet (wc) - det blir ikke til en integer - og dermed klikker resten Lenke til kommentar
xeon Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 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 Lenke til kommentar
Ganske Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 "rename" er eit kjekt verktøy som følgjer med Perl, så det er truleg installert på dei fleste system. Les man rename. Lenke til kommentar
Velmont Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 (endret) 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.. Endret 28. januar 2004 av Velmont Lenke til kommentar
magikern Skrevet 28. januar 2004 Forfatter Del Skrevet 28. januar 2004 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
moesen Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 .txt filer er vel for windows. Lagre filen som noe annet... filnavn* f.eks Lenke til kommentar
xeon Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 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
magikern Skrevet 28. januar 2004 Forfatter Del Skrevet 28. januar 2004 da får jeg denne... line 6: [: 242 filelist.txt: integer expression expected Lenke til kommentar
Velmont Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 Hva var det /me sa, xeon? Det funker bare for deg Lenke til kommentar
DummeGaas Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 .txt filer er vel for windows. Lagre filen som noe annet... filnavn* f.eks Ja. Det er forbudt å ha et filnavn som beskriver innholdet. Lenke til kommentar
Paull Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 (endret) 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 Endret 28. januar 2004 av Paull Lenke til kommentar
mohuhau Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 (endret) . Endret 28. januar 2004 av mohuhau Lenke til kommentar
kattemat Skrevet 28. januar 2004 Del Skrevet 28. januar 2004 http://olsr.org/~andreto/remspace.c Remspace gjør akkuart det du er ute etter - og det i et svingende temop 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. Lenke til kommentar
magikern Skrevet 28. januar 2004 Forfatter Del Skrevet 28. januar 2004 http://olsr.org/~andreto/remspace.c Remspace gjør akkuart det du er ute etter - og det i et svingende temop 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... Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå