Gå til innhold

Bytte mellomrom i filnavn til understrek med BASH!


Anbefalte innlegg

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 av Tor-Bjarne
Lenke til kommentar
Videoannonse
Annonse

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 av bobafett
Lenke til kommentar
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

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

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...