/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Ændre store bogstaver til små
Fra : Martin Johansen [600~


Dato : 25-07-04 18:48

Hej!

Jeg har i en mappe en masse filer som er en blanding af store og små
bogstaver - de sorteres derfor forskelligt.

Er der en kommando/script som kan ændre alle de store bogstaver til små
SAMT sætte '_' istedet for mellemrum?

På forhånd tak

--
Martin Johansen [6000]
http://tuxx.dk - "Carpe Aptenodytes!"
Mandrake Linux 9.2 med Fluxbox 0.9.6devel
Registered Linux User # 301406 (http://counter.li.org)


 
 
Leo Laursen (25-07-2004)
Kommentar
Fra : Leo Laursen


Dato : 25-07-04 19:12

On 2004-07-25, Martin Johansen [6000] <visit_my@website.tuxx.dk> wrote:
> Jeg har i en mappe en masse filer som er en blanding af store og små
> bogstaver - de sorteres derfor forskelligt.
>
> Er der en kommando/script som kan ændre alle de store bogstaver til små
> SAMT sætte '_' istedet for mellemrum?
#v+
#!/bin/sh
for f in *; do
nytnavn=$(echo $f | tr "a-z " "A-Z_")
if [ ! -e $nytnavn ]; then
mv $f $nytnavn
fi
done
#v-

Leo

Martin Johansen [600~ (25-07-2004)
Kommentar
Fra : Martin Johansen [600~


Dato : 25-07-04 19:15

Leo Laursen skrev:

> #v+
> #!/bin/sh
> for f in *; do
> nytnavn=$(echo $f | tr "a-z " "A-Z_") if [ ! -e $nytnavn ]; then
> mv $f $nytnavn
> fi
> done
> #v-

Dvs. ind i et script med den og så:

$ ./script.sh

i den mappe hvorpå alle filerne ligger?

--
Martin Johansen [6000]
http://tuxx.dk - "Carpe Aptenodytes!"
Mandrake Linux 9.2 med Fluxbox 0.9.6devel
Registered Linux User # 301406 (http://counter.li.org)


Leo Laursen (25-07-2004)
Kommentar
Fra : Leo Laursen


Dato : 25-07-04 19:29

On 2004-07-25, Martin Johansen [6000] <visit_my@website.tuxx.dk> wrote:
> Leo Laursen skrev:
>
>> #v+
>> #!/bin/sh
>> for f in *; do
>> nytnavn=$(echo $f | tr "a-z " "A-Z_") if [ ! -e $nytnavn ]; then
>> mv $f $nytnavn
>> fi
>> done
>> #v-
>
> Dvs. ind i et script med den og så:
>
> $ ./script.sh
>
> i den mappe hvorpå alle filerne ligger?
>
Ja; men scriptet behøver ikke ligge i samme dir.

scriptet antages at være /home/mj/script.sh

cd "directory"
sh /home/mj/script.sh

Jeg ser lige at jeg fik byttet om på argunenterne til tr

det skulle være tr "A-Z " "a-z_"

Prøv at køre det med echo istedet for mv, så du kan se om det ser
rigtigt ud

Leo

Henrik S. Pedersen (25-07-2004)
Kommentar
Fra : Henrik S. Pedersen


Dato : 25-07-04 19:16



Martin Johansen [6000] wrote:

> Jeg har i en mappe en masse filer som er en blanding af store og små
> bogstaver - de sorteres derfor forskelligt.
>
> Er der en kommando/script som kan ændre alle de store bogstaver til små
> SAMT sætte '_' istedet for mellemrum?

Du kan oversætte små bogstaver til store med f.eks. "tr".
Jeg vil tro, at dette script opfylder dit behov:

#!/bin/sh
IFS='
'
for file in `ls`
do
NEWFILE=`echo $file | tr '[a-z]' '[A-Z]' | tr '[ ]' '[_]'`
echo $NEWFILE
mv $file $NEWFILE
done


--
Mvh. Henrik


Martin Johansen [600~ (25-07-2004)
Kommentar
Fra : Martin Johansen [600~


Dato : 25-07-04 19:16

Henrik S. Pedersen skrev:

> Du kan oversætte små bogstaver til store med f.eks. "tr". Jeg vil tro,
> at dette script opfylder dit behov:
>
> #!/bin/sh
> IFS='
> '
> for file in `ls`
> do
> NEWFILE=`echo $file | tr '[a-z]' '[A-Z]' | tr '[ ]' '[_]'` echo
> $NEWFILE
> mv $file $NEWFILE
> done

Laver den alle store bogstaver om til små?

Vil nødig fyre noget forkert af

--
Martin Johansen [6000]
http://tuxx.dk - "Carpe Aptenodytes!"
Mandrake Linux 9.2 med Fluxbox 0.9.6devel
Registered Linux User # 301406 (http://counter.li.org)


Henrik S. Pedersen (25-07-2004)
Kommentar
Fra : Henrik S. Pedersen


Dato : 25-07-04 19:32


Martin Johansen [6000] wrote:
> Henrik S. Pedersen skrev:
>
>>Du kan oversætte små bogstaver til store med f.eks. "tr". Jeg vil tro,
>>at dette script opfylder dit behov:
>>[SNIP script]
>
> Laver den alle store bogstaver om til små?
>
> Vil nødig fyre noget forkert af

Prøv på et temporært katalog, inden du prøver på de
rigtige filer. Det virker her hos mig:

[hsp@0x50a451dd tmp]$ ls -l
totalt 0
-rw-rw-r-- 1 hsp hsp 0 jul 25 20:26 abc
-rw-rw-r-- 1 hsp hsp 0 jul 25 20:26 def
-rw-rw-r-- 1 hsp hsp 0 jul 25 20:27 g h i
-rw-rw-r-- 1 hsp hsp 0 jul 25 20:27 j k l
[hsp@0x50a451dd tmp]$ ../movefiles.sh
ABC
DEF
G_H_I
J_K_L
[hsp@0x50a451dd tmp]$ ls -l
totalt 0
-rw-rw-r-- 1 hsp hsp 0 jul 25 20:26 ABC
-rw-rw-r-- 1 hsp hsp 0 jul 25 20:26 DEF
-rw-rw-r-- 1 hsp hsp 0 jul 25 20:27 G_H_I
-rw-rw-r-- 1 hsp hsp 0 jul 25 20:27 J_K_L
[hsp@0x50a451dd tmp]$

--
Mvh. Henrik


Jacob Tranholm (25-07-2004)
Kommentar
Fra : Jacob Tranholm


Dato : 25-07-04 19:21

Martin Johansen [6000] wrote:
> Hej!
>
> Jeg har i en mappe en masse filer som er en blanding af store og små
> bogstaver - de sorteres derfor forskelligt.
>
> Er der en kommando/script som kan ændre alle de store bogstaver til små
> SAMT sætte '_' istedet for mellemrum?
>
> På forhånd tak
>

Jeg har lige siddet og leget lidt med et script, jeg kan dog ikke selv
helt forstå, hvorfor det er nødvendigt at anvende kommandoen 'n=${n%_}'
midt i scriptet, men det kort sagt får dette det til at fungere. - Det
er ikke kønt, men det fungerer:

--------------
#! /bin/bash
#

for filename in *
do n=`echo "$filename/" | tr '[:upper:]' '[:lower:]' | tr '[:space:]' '_'`
n=${n%_}
n=${n%/}
[[ $filename == $n ]] || mv "$filename" "$n"
done

exit 0
--------------

Martin Johansen [600~ (25-07-2004)
Kommentar
Fra : Martin Johansen [600~


Dato : 25-07-04 19:26

Jacob Tranholm skrev:

> Jeg har lige siddet og leget lidt med et script, jeg kan dog ikke selv
> helt forstå, hvorfor det er nødvendigt at anvende kommandoen 'n=${n%_}'
> midt i scriptet, men det kort sagt får dette det til at fungere. - Det er
> ikke kønt, men det fungerer:

Kønt eller ej det virker *perfekt*!

> #! /bin/bash
> #
>
> for filename in *
> do n=`echo "$filename/" | tr '[:upper:]' '[:lower:]' | tr '[:space:]' '_'`
> n=${n%_}
> n=${n%/}
> [[ $filename == $n ]] || mv "$filename" "$n"
> done
>
> exit 0

Takker mange gange for dette script!

Jeg fik desværre ikke de to andre til at virke..

--
Martin Johansen [6000]
http://tuxx.dk - "Carpe Aptenodytes!"
Mandrake Linux 9.2 med Fluxbox 0.9.6devel
Registered Linux User # 301406 (http://counter.li.org)


Jacob Tranholm (25-07-2004)
Kommentar
Fra : Jacob Tranholm


Dato : 25-07-04 20:58

Martin Johansen [6000] wrote:
>
> Kønt eller ej det virker *perfekt*!
>

Hvis det første script virker, vil det senere script også fungere. Jeg
skulle bare tilføje et '-n' på echo-kommandoen og så kunne jeg slette
den linie, der virkede overflødig. Hvis du gerne vil have et output på
skærmen, der viser hvilke filer, der bliver omdøbt, kan du i stedet gøre
noget i stil med:

----------------
#! /bin/bash
#

for filename in *
do n=`echo -n "$filename/" | tr '[:upper:]' '[:lower:]' | tr '[:space:]'
'_'`
n=${n%/}
if [[ "$filename" != "$n" ]]
then
echo $filename -\> $n
mv "$filename" "$n"
fi
done

exit 0
----------------

Dette script har også den fordel frem for Leos og Henriks, at det kan
konvertere Æ, Ø og Å til æ, ø og å.

Martin Johansen [600~ (25-07-2004)
Kommentar
Fra : Martin Johansen [600~


Dato : 25-07-04 22:15

Jacob Tranholm skrev:

> #! /bin/bash
> #
>
> for filename in *
> do n=`echo -n "$filename/" | tr '[:upper:]' '[:lower:]' | tr '[:space:]'
> '_'`
> n=${n%/}
> if [[ "$filename" != "$n" ]]
> then
> echo $filename -\> $n
> mv "$filename" "$n"
> fi
> done
>
> exit 0

Takker igen - den prøver jeg lige ved lejlighed. Gemt er den

--
Martin Johansen [6000]
http://tuxx.dk - "Carpe Aptenodytes!"
Mandrake Linux 9.2 med Fluxbox 0.9.6devel
Registered Linux User # 301406 (http://counter.li.org)


Leo Laursen (25-07-2004)
Kommentar
Fra : Leo Laursen


Dato : 25-07-04 23:38

On 2004-07-25, Jacob Tranholm <jacob_tranholm@hotmail.com> wrote:

> Dette script har også den fordel frem for Leos og Henriks, at det kan
> konvertere Æ, Ø og Å til æ, ø og å.

Absolut en væsentlig pointe. Jeg har simplificeret scriptet lidt.

#v+
#!/bin/sh
for filename in *; do
n=$(echo "$filename" | tr '[:upper:][:blank:]' '[:lower:]_')
if [ "$filename" != "$n" ]; then
echo $filename -\> $n
mv "$filename" "$n"
fi
done
#v-


Leo

Jacob Tranholm (25-07-2004)
Kommentar
Fra : Jacob Tranholm


Dato : 25-07-04 19:33

Jacob Tranholm wrote:
>
> Jeg har lige siddet og leget lidt med et script, jeg kan dog ikke selv
> helt forstå, hvorfor det er nødvendigt at anvende kommandoen 'n=${n%_}'
> midt i scriptet, men det kort sagt får dette det til at fungere. - Det
> er ikke kønt, men det fungerer:
>
> --------------
> #! /bin/bash
> #
>
> for filename in *
> do n=`echo "$filename/" | tr '[:upper:]' '[:lower:]' | tr '[:space:]' '_'`
> n=${n%_}
> n=${n%/}
> [[ $filename == $n ]] || mv "$filename" "$n"
> done
>
> exit 0
> --------------

Jeg har selv lige fundet fejlen i mit script og gjort det lidt pænere
(begge fungerer, men det sidste er helt sikkert det bedste):

---------------
#! /bin/bash
#

for filename in *
do n=`echo -n "$filename/" | tr '[:upper:]' '[:lower:]' | tr '[:space:]'
'_'`
n=${n%/}
[[ $filename == $n ]] || mv "$filename" "$n"
done

exit 0
---------------

Kent Friis (26-07-2004)
Kommentar
Fra : Kent Friis


Dato : 26-07-04 10:20

Den Sun, 25 Jul 2004 20:33:16 +0200 skrev Jacob Tranholm:
>
> Jeg har selv lige fundet fejlen i mit script og gjort det lidt pænere
> (begge fungerer, men det sidste er helt sikkert det bedste):
>
> ---------------
> #! /bin/bash
> #
>
> for filename in *
> do n=`echo -n "$filename/" | tr '[:upper:]' '[:lower:]' | tr '[:space:]'
> '_'`
> n=${n%/}
> [[ $filename == $n ]] || mv "$filename" "$n"
> done
>
> exit 0
> ---------------

Hvad er pointen i at putte en / bagpå og så fjerne den igen?

Mvh
Kent
--
Help test this great MMORPG game - http://www.eternal-lands.com/

Jacob Tranholm (26-07-2004)
Kommentar
Fra : Jacob Tranholm


Dato : 26-07-04 15:33

Kent Friis <nospam@nospam.invalid> wrote in message news:<4104cca2$0$66471$14726298@news.sunsite.dk>...
> Den Sun, 25 Jul 2004 20:33:16 +0200 skrev Jacob Tranholm:
> >
> > Jeg har selv lige fundet fejlen i mit script og gjort det lidt pænere
> > (begge fungerer, men det sidste er helt sikkert det bedste):
> >
> > ---------------
> > #! /bin/bash
> > #
> >
> > for filename in *
> > do n=`echo -n "$filename/" | tr '[:upper:]' '[:lower:]' | tr '[:space:]'
> > '_'`
> > n=${n%/}
> > [[ $filename == $n ]] || mv "$filename" "$n"
> > done
> >
> > exit 0
> > ---------------
>
> Hvad er pointen i at putte en / bagpå og så fjerne den igen?
>
> Mvh
> Kent

Hvis jeg skal være helt ærlig, så aner jeg det ikke...
Jeg har hugget grundstrukturen til scriptet fra
http://www.tldp.org/LDP/abs/html/textproc.html#LOWERCASE
og her skrives: "Slash added so that trailing newlines are not removed
by command substitution."

Leo Laursen (25-07-2004)
Kommentar
Fra : Leo Laursen


Dato : 25-07-04 19:40

On 2004-07-25, Jacob Tranholm <jacob_tranholm@hotmail.com> wrote:
> Jeg har lige siddet og leget lidt med et script, jeg kan dog ikke selv
> helt forstå, hvorfor det er nødvendigt at anvende kommandoen 'n=${n%_}'
> midt i scriptet, men det kort sagt får dette det til at fungere. - Det
> er ikke kønt, men det fungerer:
>
> --------------
> #! /bin/bash
> #
>
> for filename in *
> do n=`echo "$filename/" | tr '[:upper:]' '[:lower:]' | tr '[:space:]' '_'`
> n=${n%_}
> n=${n%/}
> [[ $filename == $n ]] || mv "$filename" "$n"
> done
>
> exit 0
> --------------

Prøv med echo -n (ingen newline), så tror jeg ikke du behøver "n%_"

Leo

Christian Laursen (25-07-2004)
Kommentar
Fra : Christian Laursen


Dato : 25-07-04 19:52

"Martin Johansen [6000]" <visit_my@website.tuxx.dk> writes:

> Jeg har i en mappe en masse filer som er en blanding af store og små
> bogstaver - de sorteres derfor forskelligt.
>
> Er der en kommando/script som kan ændre alle de store bogstaver til små
> SAMT sætte '_' istedet for mellemrum?

mmv kan ihvertfald.

Ellers kan man sikkert hurtigt gøre det med et lille stykke perl eller
shell-script.

--
Christian Laursen

Martin Johansen [600~ (25-07-2004)
Kommentar
Fra : Martin Johansen [600~


Dato : 25-07-04 20:37

Christian Laursen skrev:

> Ellers kan man sikkert hurtigt gøre det med et lille stykke perl eller
> shell-script.

Jeps - har fået løst problemet vha de andre indlæg i tråden

--
Martin Johansen [6000]
http://tuxx.dk - "Carpe Aptenodytes!"
Mandrake Linux 9.2 med Fluxbox 0.9.6devel
Registered Linux User # 301406 (http://counter.li.org)


Jes Vestervang (25-07-2004)
Kommentar
Fra : Jes Vestervang


Dato : 25-07-04 22:23

"Martin Johansen [6000]" <visit_my@website.tuxx.dk> writes:

> Er der en kommando/script som kan ændre alle de store bogstaver til små
> SAMT sætte '_' istedet for mellemrum?

Rename kan - i Debian følger den med perl-pakken.

Fra man rename:
To translate uppercase names to lower, you'd use

rename 'y/A-Z/a-z/' *

....sidstnævnte kan gøres med:
# rename 'y/ /_/' *

Måske det kan kombineres i én kommando.
--
mvh Jes Vestervang @ FZS600 & DT125R

Outlook Express-bruger, se her: <http://xnews.newsguy.com/>

Henrik Christian Gro~ (25-07-2004)
Kommentar
Fra : Henrik Christian Gro~


Dato : 25-07-04 22:54

Jes Vestervang <jes@dellen.royal.flof.dk> writes:

> Rename kan - i Debian følger den med perl-pakken.
>
> Fra man rename:
> To translate uppercase names to lower, you'd use
>
> rename 'y/A-Z/a-z/' *
>
> ...sidstnævnte kan gøres med:
> # rename 'y/ /_/' *
>
> Måske det kan kombineres i én kommando.

rename 'y/A-Z /a-z_/' *

..Henrik

--
Hvad har din bedstemor mon lettest ved at forstå? At din computer er
dørvogter på din forbindelse til internettet? Eller at den er firewall
på din internet connection?
-- citat Jacob Sparre Andersen

Peter Makholm (26-07-2004)
Kommentar
Fra : Peter Makholm


Dato : 26-07-04 08:08

Jes Vestervang <jes@dellen.royal.flof.dk> writes:

>> Er der en kommando/script som kan ændre alle de store bogstaver til små
>> SAMT sætte '_' istedet for mellemrum?
>
> Rename kan - i Debian følger den med perl-pakken.

Desvære bruger de fleste andre linuxdistributioner et rename-program
der kommer fra util-linux. Dette program er desvære ikke særlig godt
hvis man vil noget mere advanceret end at ændre *.htm til *.html.

--
Peter Makholm | Vi smider blade allesammen - hele tiden
peter@makholm.net | som et konstant spirende efterår
http://hacking.dk | Og hele tiden vokser nye frugter frem
| og vi finder nogen til at plukke dem
| -- Tilt, Perkussive popler

Michael Knudsen (27-07-2004)
Kommentar
Fra : Michael Knudsen


Dato : 27-07-04 20:00



Kim Emax (27-07-2004)
Kommentar
Fra : Kim Emax


Dato : 27-07-04 23:10

Michael Knudsen wrote:

> Eksempelvis:
>
> luggage$ for i in 1 2 3
>> do read a
>> echo $a
>> done
> 8
> 8
> 9
> 9
> 0
> 0
>
> Det kan naturligvis ogsaa skrives som oneliner:
>
> $ for i in 1 2 3 ; do read a; echo a; done

Nu blev jeg nysgerrig og ville lige prøve, der sker nada... den står bare og
"hænger". Smider jeg et $ foran a:

for i in 1 2 3 ; do read a; echo $a; done

Sker der stadig ingenting. Hvad gør "for i in 1 2 3", hvad er 1 2 3 en
henvisning til?

--
Take Care
Kim Emax - master|minds - Vi tænker IT for dig...
http://www.masterminds.dk - http://www.emax.dk



Kent Friis (28-07-2004)
Kommentar
Fra : Kent Friis


Dato : 28-07-04 18:22

Den Wed, 28 Jul 2004 00:10:03 +0200 skrev Kim Emax:
> Michael Knudsen wrote:
>
>> Eksempelvis:
>>
>> luggage$ for i in 1 2 3
>>> do read a
>>> echo $a
>>> done
>> 8
>> 8
>> 9
>> 9
>> 0
>> 0
>>
>> Det kan naturligvis ogsaa skrives som oneliner:
>>
>> $ for i in 1 2 3 ; do read a; echo a; done
>
> Nu blev jeg nysgerrig og ville lige prøve, der sker nada... den står bare og
> "hænger". Smider jeg et $ foran a:
>
> for i in 1 2 3 ; do read a; echo $a; done
>
> Sker der stadig ingenting. Hvad gør "for i in 1 2 3", hvad er 1 2 3 en
> henvisning til?

den tæller 1 2 3...

read a læser en linie fra tastaturet over i a (intil du trykker enter).

echo $a skriver så den linie ud på skærmen.

Mvh
Kent
--
Help test this great MMORPG game - http://www.eternal-lands.com/

Michael Knudsen (29-07-2004)
Kommentar
Fra : Michael Knudsen


Dato : 29-07-04 12:06



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408936
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste