/ 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
Shell script der flytter filer og opretter~
Fra : Jacob d'Andrade


Dato : 29-09-05 18:44

Hej NG

Hvordan fixer jeg det, jeg har ca 1600 billeder, som jeg godt vil have
sorteret i mapper, alt efter filnavnet. filerne hedder f.eks
"honda_civic_9876186.jpg" ... Det alle billederne har til fælles, er at de
alle starter med nogle bogstaver, og med et _ skifter til tal, så det jeg er
på udkig efter, er en måde hvorpå jeg kan få et script til at læse det
første af filnavnet indtil den rammer nogle tal, og så bruge de dertil læste
bogstaver til at oprette en mappe og kopiere alle billeder der hedder det
samme, men blot med nogle andre tal ned i samme mappe.

Jeg har googlet lidt, men kunne ikke lige finde noget...

Håber der er nogen der lige kan fixe et lille shell script

Regards Jacob



 
 
Kent Friis (29-09-2005)
Kommentar
Fra : Kent Friis


Dato : 29-09-05 18:57

Den Thu, 29 Sep 2005 19:43:48 +0200 skrev Jacob d'Andrade:
> Hej NG
>
> Hvordan fixer jeg det, jeg har ca 1600 billeder, som jeg godt vil have
> sorteret i mapper, alt efter filnavnet. filerne hedder f.eks
> "honda_civic_9876186.jpg" ... Det alle billederne har til fælles, er at de
> alle starter med nogle bogstaver, og med et _ skifter til tal, så det jeg er
> på udkig efter, er en måde hvorpå jeg kan få et script til at læse det
> første af filnavnet indtil den rammer nogle tal, og så bruge de dertil læste
> bogstaver til at oprette en mappe og kopiere alle billeder der hedder det
> samme, men blot med nogle andre tal ned i samme mappe.
>
> Jeg har googlet lidt, men kunne ikke lige finde noget...
>
> Håber der er nogen der lige kan fixe et lille shell script

Her er noget du kan tage udgangspunkt i:

filnavn=honda_civic_9876186.jpg
echo ${filnavn%_*}
echo ${filnavn##*_}

(klipper dog ikke efter tallene, men efter sidste "_").

Mvh
Kent
--
Hard work may pay off in the long run, but laziness pays off right now.

Jan Birk (30-09-2005)
Kommentar
Fra : Jan Birk


Dato : 30-09-05 06:13

> Hvordan fixer jeg det, jeg har ca 1600 billeder, som jeg godt vil have
> sorteret i mapper, alt efter filnavnet. filerne hedder f.eks
> "honda_civic_9876186.jpg" ... Det alle billederne har til fælles, er at de
> alle starter med nogle bogstaver, og med et _ skifter til tal, så det jeg er
> på udkig efter, er en måde hvorpå jeg kan få et script til at læse det
> første af filnavnet indtil den rammer nogle tal, og så bruge de dertil læste
> bogstaver til at oprette en mappe og kopiere alle billeder der hedder det
> samme, men blot med nogle andre tal ned i samme mappe.

Til lidt inspiration:

----------------- go.sh --------------
#!/bin/bash
for billede in `ls` ; do
katalog=`echo ${billede%_*}`
if [ -d $katalog ]; then
mv $billede $katalog
else
mkdir $katalog
mv $billede $katalog
fi
done
------------------------------------

/Jan

Kasper Dupont (01-10-2005)
Kommentar
Fra : Kasper Dupont


Dato : 01-10-05 18:43

Jan Birk wrote:
>
> Til lidt inspiration:

Der er lige et par fejl og uhensigtsmæssigheder i det script.

>
> ----------------- go.sh --------------
> #!/bin/bash
> for billede in `ls` ; do

Den brug af ls er overflødig og vil give forkert resultat,
hvis der er mærkelige tegn som f.eks. mellemrum i filnavnene.

> katalog=`echo ${billede%_*}`

Her er brug af echo vist overflødig, og kan nok også give
problemer med mærkelige tegn. I øvrigt mangler der vist et
par " tegn.

> if [ -d $katalog ]; then

Det check kan man roligt springe over. Fejlmeldingerne fra
mkdir kan undertrykkes med -p.

> mv $billede $katalog
> else
> mkdir $katalog
> mv $billede $katalog

Tænk nu, hvis $katalog allerede findes men ikke er et
directory. Og der mangler vist en masse " tegn.

> fi
> done
> ------------------------------------
>
> /Jan

Her er mit bud til en forbedret udgave.
(Ikke testet)

#!/bin/bash
for billede in * ; do
katalog="${billede%_*}"
mkdir -p "$katalog" && mv "$billede" "$katalog"
done

--
Kasper Dupont
Note to self: Don't try to allocate
256000 pages with GFP_KERNEL on x86.

Rene Joergensen (02-10-2005)
Kommentar
Fra : Rene Joergensen


Dato : 02-10-05 09:10

Kasper Dupont <kasperd@daimi.au.dk> wrote:

> Den brug af ls er overflødig og vil give forkert resultat,
> hvis der er mærkelige tegn som f.eks. mellemrum i filnavnene.

Til det formål kan man ændre i IFS, start scriptet med:

IFS='
'

> Her er mit bud til en forbedret udgave.
> (Ikke testet)
>
> #!/bin/bash
> for billede in * ; do

Så må man håbe at der ikke er mange filer i det directory.

--
-René


Klaus Alexander Seis~ (02-10-2005)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 02-10-05 09:47

Rene Jørgensen skrev:

>> Den brug af ls er overflødig og vil give forkert resultat,
>> hvis der er mærkelige tegn som f.eks. mellemrum i filnavnene.
>
> Til det formål kan man ændre i IFS, start scriptet med:
>
> IFS='
> '

Hvad skulle det hjælpe? Linjer/ord deles op ved IFS-grænser, og nu har
du lige sat IFS=LF. Hvis LF skal beholdes i filnavnet, skal IFS sættes
til fx "    " (mellemrum + tabulatortegn).

>> Her er mit bud til en forbedret udgave.
>> (Ikke testet)
>>
>> #!/bin/bash
>> for billede in * ; do
>
> Så må man håbe at der ikke er mange filer i det directory.

Så ku' man jo

#v+

$ find /sti/til/filer -type f -print0 | xargs -r0 kommando

#v-

hvor 'kommando' er det der skal gøre ved billederne.

Mvh,

--
Klaus Alexander Seistrup
Magnetic Ink, Copenhagen, Denmark
http://magnetic-ink.dk/

Rene Joergensen (02-10-2005)
Kommentar
Fra : Rene Joergensen


Dato : 02-10-05 10:24

Klaus Alexander Seistrup <klaus@seistrup.dk> wrote:

> Hvad skulle det hjælpe? Linjer/ord deles op ved IFS-grænser, og nu har
> du lige sat IFS=LF. Hvis LF skal beholdes i filnavnet, skal IFS sættes
> til fx "    " (mellemrum + tabulatortegn).

Hvorfor skulle man ville beholde LF?

--
-René


Christian Iversen (02-10-2005)
Kommentar
Fra : Christian Iversen


Dato : 02-10-05 11:47

Rene Joergensen wrote:

> Klaus Alexander Seistrup <klaus@seistrup.dk> wrote:
>
>> Hvad skulle det hjælpe? Linjer/ord deles op ved IFS-grænser, og nu har
>> du lige sat IFS=LF. Hvis LF skal beholdes i filnavnet, skal IFS sættes
>> til fx " " (mellemrum + tabulatortegn).
>
> Hvorfor skulle man ville beholde LF?

Fordi det kan være en del af filnavnet.

--
M.V.H
Christian Iversen

Klaus Alexander Seis~ (02-10-2005)
Kommentar
Fra : Klaus Alexander Seis~


Dato : 02-10-05 12:18

Christian Iversen skrev:

>> Hvorfor skulle man ville beholde LF?
>
> Fordi det kan være en del af filnavnet.

Men det er en smule akademisk, ikk'? Hvor almindeligt er det i praxis
at folk har filnavne der indeholder LF?

Mvh,

--
Klaus Alexander Seistrup
Copenhagen, Denmark
http://seistrup.dk/

Hans Joergensen (02-10-2005)
Kommentar
Fra : Hans Joergensen


Dato : 02-10-05 15:37

Klaus Alexander Seistrup wrote:
>> Fordi det kan være en del af filnavnet.
> Men det er en smule akademisk, ikk'? Hvor almindeligt er det i praxis
> at folk har filnavne der indeholder LF?

~ > locate LF|wc -l
113

~$ locate LF|wc -l
375

// Hans
--
http://rd350.nathue.dk - still smoking

Kasper Dupont (02-10-2005)
Kommentar
Fra : Kasper Dupont


Dato : 02-10-05 20:19

Klaus Alexander Seistrup wrote:
>
> Christian Iversen skrev:
>
> >> Hvorfor skulle man ville beholde LF?
> >
> > Fordi det kan være en del af filnavnet.
>
> Men det er en smule akademisk, ikk'? Hvor almindeligt er det i praxis
> at folk har filnavne der indeholder LF?

Jeg bruger det aldrig selv, men man er nødt til at være opmærksom på
muligheden. Afhængigt af hvem der vælger filnavnene, så kan det være
et sikkerhedshul.

--
Kasper Dupont
Note to self: Don't try to allocate
256000 pages with GFP_KERNEL on x86.

Kasper Dupont (02-10-2005)
Kommentar
Fra : Kasper Dupont


Dato : 02-10-05 20:28

Rene Joergensen wrote:
>
> Kasper Dupont <kasperd@daimi.au.dk> wrote:
>
> > Den brug af ls er overflødig og vil give forkert resultat,
> > hvis der er mærkelige tegn som f.eks. mellemrum i filnavnene.
>
> Til det formål kan man ændre i IFS, start scriptet med:
>
> IFS='
> '

Ikke godt nok. Filnavne kan indeholde *alle* tegn pånær / og NUL.

>
> > Her er mit bud til en forbedret udgave.
> > (Ikke testet)
> >
> > #!/bin/bash
> > for billede in * ; do
>
> Så må man håbe at der ikke er mange filer i det directory.

Begrænsningen gælder ved kald af eksterne kommandoer. Men for er
ikke nogen ekstern kommando, så der render man ikke ind i samme
problem:

[kasperd@hactar:pts/11:/tmp/mange] ls *
-bash: /bin/ls: Argument list too long
[kasperd@hactar:pts/11:/tmp/mange] for n in * ; do echo $n ; done|wc
30000 30000 168894
[kasperd@hactar:pts/11:/tmp/mange]

I øvrigt ville ls sådan som den blev foreslået anvendt ikke
hjælpe på det med antal argumenter:

[kasperd@hactar:pts/11:/tmp/mange] ls `ls`
-bash: /bin/ls: Argument list too long
[kasperd@hactar:pts/11:/tmp/mange]

Den eneste ulempe ved at bruge for med mange argumenter er
performance. Men har man så mange filer, at det er et problem,
så er et shell script nok det forkerte værktøj til opgaven.
Om det så bør løses med et perl script, et C program eller
noget tredje vil jeg ikke gøre mig til dommer over.

--
Kasper Dupont
Note to self: Don't try to allocate
256000 pages with GFP_KERNEL on x86.

Jacob d'Andrade (30-09-2005)
Kommentar
Fra : Jacob d'Andrade


Dato : 30-09-05 09:22

Hej igen

Jeg takker rigtig mange gange.

Mvh Jacob


"Jacob d'Andrade" <jacob@thezub.dk> skrev i en meddelelse
news:dhh94n$55g$1@daniella.thezub.dk...
> Hej NG
>
> Hvordan fixer jeg det, jeg har ca 1600 billeder, som jeg godt vil have
> sorteret i mapper, alt efter filnavnet. filerne hedder f.eks
> "honda_civic_9876186.jpg" ... Det alle billederne har til fælles, er at de
> alle starter med nogle bogstaver, og med et _ skifter til tal, så det jeg
> er på udkig efter, er en måde hvorpå jeg kan få et script til at læse det
> første af filnavnet indtil den rammer nogle tal, og så bruge de dertil
> læste bogstaver til at oprette en mappe og kopiere alle billeder der
> hedder det samme, men blot med nogle andre tal ned i samme mappe.
>
> Jeg har googlet lidt, men kunne ikke lige finde noget...
>
> Håber der er nogen der lige kan fixe et lille shell script
>
> Regards Jacob
>



Jacob Sparre Anderse~ (02-10-2005)
Kommentar
Fra : Jacob Sparre Anderse~


Dato : 02-10-05 18:54

Klaus Alexander Seistrup skrev:
> Christian Iversen skrev:

>>> Hvorfor skulle man ville beholde LF?
>>
>> Fordi det kan være en del af filnavnet.
>
> Men det er en smule akademisk, ikk'? Hvor almindeligt er det i
> praxis at folk har filnavne der indeholder LF?

Ikke helt akademisk. Jeg plejer at have filer liggende med alle
mulige mærkelige navne (alle andre ISO-8859-1-tegn end NUL og /), men
det er nu mest for at genere de programmer jeg skriver.

Jacob
--
»I like it when the support group complains that they have
insufficient data on mean time to repair bugs in Ada
software.« -- Robert I. Eachus

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

Månedens bedste
Årets bedste
Sidste års bedste