Forrige tråd
Neste tråd
Print tråd

For-loop

For-loop #1890109 15/11/2014 12:23
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Hei jeg skal bruke en for-løkke til å telle antall filer i en katalog,
Hvordan får man den rapportere bare antallet .Jeg har prøvd med noe sånt:
if [ -f ls-1|wc -l $x ]
,men da teller den opp hver gang løkken går rundt altså tallet 1 tretten ganger istedenfor 13.

Redigert av Morteen; 15/11/2014 12:25.

Re: For-loop [Re: Morteen] #1890113 15/11/2014 12:56
Registrert: Aug 2006
Innlegg: 8,300
polkaDOT Offline
Søk hjelp!
Offline
Søk hjelp!
Registrert: Aug 2006
Innlegg: 8,300
Hva med å sette en counter. Nå er det lenge siden jeg har gjort noe batch scripting, men i andre språk hadde jeg gjort noe int count = 0; og for hver fil, hadde jeg gjort noe ++count;

Så printer du ut count.


Ride your bike, and be happy!

Team Ibis / Probike

Re: For-loop [Re: Morteen] #1890165 15/11/2014 17:24
Registrert: Apr 2005
Innlegg: 647
H
helomoto Offline
Avhengig
Offline
Avhengig
H
Registrert: Apr 2005
Innlegg: 647
Sier oppgaven at du må bruke en for-løkke?
Må alt skje inne i for-løkken, eller kan du telle etterpå med wc?
echo *| wc -w

Eller hvis du bare vil ha filer, ikke dirs:
for f in *; do [[ -d "$f" ]] || echo "$f" ; done |wc -w

Må alt skje i løkken, kan du bruke en counter.
for f in *; do [[ -d "$f" ]] || ((i++)); done
echo $i


> Assos er laget for korpulente sveitsiske bankfolk.
Re: For-loop [Re: Morteen] #1890176 15/11/2014 18:06
Registrert: Aug 2007
Innlegg: 3,859
Loki Offline
Besatt
Offline
Besatt
Registrert: Aug 2007
Innlegg: 3,859
Mange muligheter her, for loop virker litt kunstig, ville valgt noe sånt tror jeg:

find -type f | wc -l


He took the road less travelled, but somehow won out in the end
Re: For-loop [Re: Morteen] #1890179 15/11/2014 18:11
Registrert: Jun 2009
Innlegg: 1,471
Ola R. Offline
Veteran
Offline
Veteran
Registrert: Jun 2009
Innlegg: 1,471
Er ikke find-kommandoen rekursiv, slik at den tar med alle underkataloger også? Også må startsted angis, f.eks ".", slik:

find . -type f | wc -l

Re: For-loop [Re: Morteen] #1890181 15/11/2014 18:17
Registrert: May 2010
Innlegg: 767
Liol Offline
Ringrev
Offline
Ringrev
Registrert: May 2010
Innlegg: 767
Hvis du virkelig må bruke en for-loop så ville jeg gjort noe slikt:

Code:
#!/bin/bash

i=0
for f in *; do
    if [ -f "$f" ]; then
        i=$((i+1))
    fi
done

echo $i

Re: For-loop [Re: Morteen] #1890184 15/11/2014 18:30
Registrert: Sep 2008
Innlegg: 494
pogoman Offline
Entusiast
Offline
Entusiast
Registrert: Sep 2008
Innlegg: 494
ls -l | grep '^-' | wc -l

Re: For-loop [Re: Ola R.] #1890186 15/11/2014 18:38
Registrert: Aug 2007
Innlegg: 3,859
Loki Offline
Besatt
Offline
Besatt
Registrert: Aug 2007
Innlegg: 3,859
Sitat: Ola R.
Er ikke find-kommandoen rekursiv, slik at den tar med alle underkataloger også? Også må startsted angis, f.eks ".", slik:

find . -type f | wc -l


Jo, GNU find har dog . som default, depth kan brukes dersom rekursivt søk er uønsket:

find -type f -depth 1





He took the road less travelled, but somehow won out in the end
Re: For-loop [Re: Morteen] #1890193 15/11/2014 19:17
Registrert: Jun 2007
Innlegg: 1,714
Brumm Offline
Ivrig
Offline
Ivrig
Registrert: Jun 2007
Innlegg: 1,714
echo $(($(ls -l | grep -v ^d | wc -l)-1))

Re: For-loop [Re: Ola R.] #1890205 15/11/2014 19:56
Registrert: May 2007
Innlegg: 1,279
schnappi Offline
Krokoknøtt
Offline
Krokoknøtt
Registrert: May 2007
Innlegg: 1,279
Sitat: Ola R.
Er ikke find-kommandoen rekursiv, slik at den tar med alle underkataloger også?


-maxdepth 1 burde kunne hjelpe.

Ellers er dette en oppgave for find, ikke en for-løkke. Kombinasjoner med ls må quotes riktig, og det er *skikkelig* mas (kataloger med \n i navn og denslags...)

Redigert av schnappi; 15/11/2014 19:57.

Ich bin Schnappi, das KLEINe Krokodil
Re: For-loop [Re: Morteen] #1890214 15/11/2014 20:32
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Jeg løste i utgangspunktet oppgaven med ls -1|grep ^-|wc -l
men fikk en kommentar at en for-løkke var det læreren var ute etter.
Får prøve forslagene deres , mange takk !


Re: For-loop [Re: helomoto] #1890221 15/11/2014 21:03
Registrert: Jan 2012
Innlegg: 1,399
T
trondmm Offline
Veteran
Offline
Veteran
T
Registrert: Jan 2012
Innlegg: 1,399
Sitat: helomoto
Eller hvis du bare vil ha filer, ikke dirs:
for f in *; do [[ -d "$f" ]] || echo "$f" ; done |wc -w


Denne feiler hvis det er noe annet enn kataloger og filer i katalogen

Re: For-loop [Re: schnappi] #1890229 15/11/2014 21:09
Registrert: Jan 2012
Innlegg: 1,399
T
trondmm Offline
Veteran
Offline
Veteran
T
Registrert: Jan 2012
Innlegg: 1,399
Sitat: schnappi
Sitat: Ola R.
Er ikke find-kommandoen rekursiv, slik at den tar med alle underkataloger også?


-maxdepth 1 burde kunne hjelpe.


og "-mindepth 1" hvis neste oppgave er å telle kataloger.

Sitat: schnappi
Ellers er dette en oppgave for find, ikke en for-løkke. Kombinasjoner med ls må quotes riktig, og det er *skikkelig* mas (kataloger med \n i navn og denslags...)


Trenger ikke newline for å skape krøll. vanlig mellomrom er en god kilde til kluss

Re: For-loop [Re: Morteen] #1890551 17/11/2014 11:30
Registrert: Oct 2011
Innlegg: 3,463
Rene Offline
Besatt
Offline
Besatt
Registrert: Oct 2011
Innlegg: 3,463
På videregående sleit jeg også med lærere som krevde mer kompliserte svar enn oppgaven krevde. Min IT-lærer ble sur da jeg fant måter som var enklere enn hans måte å gjøre ting på, siden han ikke hadde kommet på dem først.

Re: For-loop [Re: Rene] #1890563 17/11/2014 11:47
Registrert: Jan 2012
Innlegg: 1,399
T
trondmm Offline
Veteran
Offline
Veteran
T
Registrert: Jan 2012
Innlegg: 1,399
Sitat: Rene
På videregående sleit jeg også med lærere som krevde mer kompliserte svar enn oppgaven krevde. Min IT-lærer ble sur da jeg fant måter som var enklere enn hans måte å gjøre ting på, siden han ikke hadde kommet på dem først.


Saken er vel heller at hensikten med oppgaven er å lære seg å bruke for-løkker, ikke å telle antall filer. Da er det ikke noe poeng i å løse oppgaven uten bruk av for. Uansett hvor mye mer effektiv filtellemåten din var.

Re: For-loop [Re: Morteen] #1890593 17/11/2014 12:41
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Læreren godkjente oppgaven med ls - ,men jeg ble litt irritert på meg selv når jeg ikke klarte å se hvordan man skulle bruke for-løkke.
Nå har jeg levert med begge alternativene . :-)


Re: For-loop [Re: Morteen] #1890624 17/11/2014 13:38
Registrert: May 2009
Innlegg: 9,144
F
fredriks Offline
Søk hjelp!
Offline
Søk hjelp!
F
Registrert: May 2009
Innlegg: 9,144
Jag vet inte ens vilket program dere snakker om... (unix/linux)? men en for loop för att räkna filer i en katalog tycker jag verkar vara en rar oppgave. En for loop använder man ju när man vet hur många gånger man ska göra något och i detta fallet är det väl just det man vill få fram.

En while loop borde väl vara bättre om man vill ha en loop.

Men möjligt att jag helt missar vad man ska göra i detta programet.

Redigert av fredriks; 17/11/2014 15:20.
Re: For-loop [Re: Morteen] #1891237 18/11/2014 19:19
Registrert: Aug 2006
Innlegg: 8,300
polkaDOT Offline
Søk hjelp!
Offline
Søk hjelp!
Registrert: Aug 2006
Innlegg: 8,300
Hva er det du studerer egentlig?

Enig med fredriks, skal det være en løkke, så heller en while (så lenge det er elementer i mappen).


Ride your bike, and be happy!

Team Ibis / Probike

Re: For-loop [Re: Morteen] #1891375 19/11/2014 04:26
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Linux introduksjon


Re: For-loop [Re: Morteen] #1891502 19/11/2014 10:20
Registrert: May 2007
Innlegg: 1,279
schnappi Offline
Krokoknøtt
Offline
Krokoknøtt
Registrert: May 2007
Innlegg: 1,279
Sitat: Morteen
Linux introduksjon


Beklager at jeg ikke kom på denne med en gang. En klassiker.


Ich bin Schnappi, das KLEINe Krokodil
Re: For-loop [Re: schnappi] #1891531 19/11/2014 10:58
Registrert: May 2009
Innlegg: 3,952
Lurifax Offline
Besatt
Offline
Besatt
Registrert: May 2009
Innlegg: 3,952
Sitat: schnappi
Sitat: Morteen
Linux introduksjon


Beklager at jeg ikke kom på denne med en gang. En klassiker.


hehe, inte dum inte ICON_SMILE


______________________________________________________________
"Det er greit om du er uenig med meg. Jeg kan ikke tvinge deg til å ha rett." ICON_WINK
Re: For-loop [Re: trondmm] #1891582 19/11/2014 12:05
Registrert: Aug 2007
Innlegg: 3,859
Loki Offline
Besatt
Offline
Besatt
Registrert: Aug 2007
Innlegg: 3,859
Sitat: trondmm

Sitat: schnappi
Ellers er dette en oppgave for find, ikke en for-løkke. Kombinasjoner med ls må quotes riktig, og det er *skikkelig* mas (kataloger med \n i navn og denslags...)


Trenger ikke newline for å skape krøll. vanlig mellomrom er en god kilde til kluss


Med -print0 opsjonen til find og --null til xargs kan man unngå en del problemer:

find ... -print0 | xargs --null ...

Eksempel (trivielt):

$ find | xargs ls -dl
ls: cannot access ./Filnavn: No such file or directory
ls: cannot access med: No such file or directory
ls: cannot access linjeskift: No such file or directory
ls: cannot access Dette: No such file or directory
ls: cannot access er: No such file or directory
ls: cannot access linje: No such file or directory
ls: cannot access 2: No such file or directory
drwxr-xr-x 2 user grp 60 Nov 19 12:59 .

$ find -print0 | xargs --null ls -dl
drwxr-xr-x 2 user grp 60 Nov 19 12:59 .
-rw-r--r-- 1 user grp 0 Nov 19 12:59 ./Filnavn med linjeskift ?Dette er linje 2


He took the road less travelled, but somehow won out in the end
Re: For-loop [Re: Morteen] #1892228 20/11/2014 19:36
Registrert: Aug 2006
Innlegg: 8,300
polkaDOT Offline
Søk hjelp!
Offline
Søk hjelp!
Registrert: Aug 2006
Innlegg: 8,300
Sitat: Morteen
Linux introduksjon

Tenkte mer på utdannelsen du tar.


Ride your bike, and be happy!

Team Ibis / Probike

Re: For-loop [Re: Morteen] #1892255 20/11/2014 20:35
Registrert: Apr 2004
Innlegg: 655
Morteen Offline OP
Avhengig
OP Offline
Avhengig
Registrert: Apr 2004
Innlegg: 655
Årstudium i Informasjonsbehandling ved Høyskolen i Telemark



Moderator  support