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