Tor-Bjarne Skrevet 30. januar 2008 Del Skrevet 30. januar 2008 (endret) p=$# if [ $p -ne 1 ] then echo 'Feil!' exit fi for filnavn in $(ls) do nyttnavn=$(ls $1/$filnavn | sed s/' '/_/g) mv $filnavn $nyttfilnavn done Dette skriptet skal finne mellomrom i alle filer i valgt mappe og så bytte dem ut med understrek. Virker fint om man for eksempel bytter ut a med b, men med mellomrom blir det problem. Bør jeg bruke noen '-tegn eller "-tegn? Kanskje ls -Q eller ls -b? Endret 30. januar 2008 av Tor-Bjarne Lenke til kommentar
bobafett Skrevet 31. januar 2008 Del Skrevet 31. januar 2008 (endret) Jeg ville forsøkt uten ''. Bruker dette ofte i vi. Når jeg skal bytte ut mellomrom med et annet tegn bruker jeg bare s/ /_/g Vet ikke hvordan dette virker i script, men det er verdt et forsøk. edit: kanskje litt vanskelig å se, men det skal være s/<mellomrom>/_/g Endret 31. januar 2008 av bobafett Lenke til kommentar
Tor-Bjarne Skrevet 31. januar 2008 Forfatter Del Skrevet 31. januar 2008 Jeg ville forsøkt uten ''. Bruker dette ofte i vi. Når jeg skal bytte ut mellomrom med et annet tegn bruker jeg bare s/ /_/g Vet ikke hvordan dette virker i script, men det er verdt et forsøk. edit: kanskje litt vanskelig å se, men det skal være s/<mellomrom>/_/g Takk for svaret Har prøvd utallige versjoner av den metoden uten suksess. Problemet oppstår når du kaller på scriptet i terminal, være det linux(ubuntu) eller mac terminal. Gitt et filnavn, foreksempel: hello world.sh Kaller på scriptet i terminalen og den kjører gjennom scriptet. Den utfører de andre oppgavene uten problem, som å bytte ut æøå med ae oe aa, men når det kommer til (space) mellomrom, så takler den ikke filnavnene. Den "splitter opp" filene og behandler dem som 2 seperate filer, altså i dette tilfellet, hello <--- egen fil. World <--- Egen fil. Håper det var beskrivende nokk Lenke til kommentar
bobafett Skrevet 1. februar 2008 Del Skrevet 1. februar 2008 Dette skal virke: for i in *; doj=`echo "$i" | sed "s/ /_/g"` mv "$i" $j done Litt vanskelig å se, men igjen er det s/<mellomrom>/_/g Lenke til kommentar
Tor-Bjarne Skrevet 1. februar 2008 Forfatter Del Skrevet 1. februar 2008 takker for svaret Skal få testet det mandag! Lenke til kommentar
vidarlo Skrevet 5. februar 2008 Del Skrevet 5. februar 2008 Eg har alltid brukt følgande regexp: "s/\ /_/" for det, inkludert hermetegn når eg bruker sed til slikt... Også verdt eit forsøk. Lenke til kommentar
asicman Skrevet 5. februar 2008 Del Skrevet 5. februar 2008 for filnavn in $(ls) ls vil gi deg kataloger, bruk heller find, f.eks. find . -type f -maxdepth 1 evt. fjern -maxdepth 1 hvis du vil ha med filer i underkataloger. Hvis du skriver find $1 -type f -maxdepth 1 så finner den alle filene i katalogen angitt som argument 1. nyttnavn=$(ls $1/$filnavn | sed s/' '/_/g) du brude kunne skrive sed '/ /_/g', men jeg ville heller ha brukt tr til dette: nyttnavn=$(echo $1/$filnavn | tr ' ' _) 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å