/ 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
Find kommando?
Fra : Paminu


Dato : 14-11-05 22:21

Findes der en kommando som gennemsøger samtlige filer i et dir for om et
givet ord optræder i en eller flere af filerne.

Hvis jeg fx har et bibliotek med 10 filer. Så vil jeg gerne vide om ordet
"path" befinder sig i nogen af filerne.

 
 
Adam Sjøgren (14-11-2005)
Kommentar
Fra : Adam Sjøgren


Dato : 14-11-05 22:27

On Mon, 14 Nov 2005 22:21:00 +0100, Paminu wrote:

> Findes der en kommando som gennemsøger samtlige filer i et dir for om et
> givet ord optræder i en eller flere af filerne.

> Hvis jeg fx har et bibliotek med 10 filer. Så vil jeg gerne vide om ordet
> "path" befinder sig i nogen af filerne.

Ja. Kommandoen hedder "grep". Læs mere i manualen.

Et tip til at finde kommandoer man ikke kender: læs manualen til
kommandoen "apropos".


Mvh.

--
"Even if you don't have all the things you want, be Adam Sjøgren
grateful for the things you don't have that you asjo@koldfront.dk
don't want."

Paminu (14-11-2005)
Kommentar
Fra : Paminu


Dato : 14-11-05 22:37

Adam Sjøgren wrote:

> On Mon, 14 Nov 2005 22:21:00 +0100, Paminu wrote:
>
>> Findes der en kommando som gennemsøger samtlige filer i et dir for om et
>> givet ord optræder i en eller flere af filerne.
>
>> Hvis jeg fx har et bibliotek med 10 filer. Så vil jeg gerne vide om ordet
>> "path" befinder sig i nogen af filerne.
>
> Ja. Kommandoen hedder "grep". Læs mere i manualen.
>
> Et tip til at finde kommandoer man ikke kender: læs manualen til
> kommandoen "apropos".
>
>
> Mvh.
>


Den har jeg prøvet (har også læst man siderne) men det dur ikke. Når jeg
står i et dir som jeg ved indholder nogle filer som jeg ved indeholder
ordet "path" og skriver "grep path" så fryser min xterm bare.

Adam Sjøgren (14-11-2005)
Kommentar
Fra : Adam Sjøgren


Dato : 14-11-05 22:41

On Mon, 14 Nov 2005 22:36:37 +0100, Paminu wrote:

> Adam Sjøgren wrote:

>> Ja. Kommandoen hedder "grep". Læs mere i manualen.

> Den har jeg prøvet (har også læst man siderne) men det dur ikke.

Så skal du læse manualen igen - eller måske hellere en generel
introduktion til shells.


> Når jeg står i et dir som jeg ved indholder nogle filer som jeg ved
> indeholder ordet "path" og skriver "grep path" så fryser min xterm
> bare.

Prøv "grep path *" - hvis du ikke angiver hvilke filer grep skal lede
i, så leder den i standard input. Så det du kalder at din "xterm
fryser" er såmænd at grep gør hvad du beder om, leder efter ordet "path"
i det du taster ind til den på stdin.


Mvh.

--
"Jeg har snart gennemlæst det meste af Internettet for Adam Sjøgren
at finde en løsning - men uden resultat..." asjo@koldfront.dk

N/A (16-11-2005)
Kommentar
Fra : N/A


Dato : 16-11-05 16:32



Kasper Dupont (16-11-2005)
Kommentar
Fra : Kasper Dupont


Dato : 16-11-05 15:18

Adam Sjøgren wrote:
>
> Prøv "grep path *"

Det er fint nok, hvis der kun er et niveau, og der kun er filer.
Men hvis der er underbiblioteker, symlinks, device inodes, pipes
og sockets, så er det en fordel at bruge find.

find . -type f -print0 | xargs -0 grep

(Det kræver man har GNU versionen af find og xargs. Uden dem har
jeg ikke nogen god løsning.)

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

Kim Hansen (16-11-2005)
Kommentar
Fra : Kim Hansen


Dato : 16-11-05 15:31

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

> Adam Sjøgren wrote:
>>
>> Prøv "grep path *"
>
> Det er fint nok, hvis der kun er et niveau, og der kun er filer.
> Men hvis der er underbiblioteker, symlinks, device inodes, pipes
> og sockets, så er det en fordel at bruge find.
>
> find . -type f -print0 | xargs -0 grep

Det er vel stort set det samme som 'grep -r .'

--
Kim Hansen

Klaus Ellegaard (16-11-2005)
Kommentar
Fra : Klaus Ellegaard


Dato : 16-11-05 16:32

Kim Hansen <kimhanse@oek.dk> writes:

>> find . -type f -print0 | xargs -0 grep

>Det er vel stort set det samme som 'grep -r .'

$ grep -r blah .
grep: illegal option -- r
Usage: grep -hblcnsviw pattern file . . .

Jeg er ikke helt klar over, hvad spørgeren egentlig vil. Hvis det
skal være at få et "ordet 'path' findes i en eller flere filer",
så er ingen af ovenstående løsninger gode eller "standardiseret"
Unix.

Skal man have subdirs med, bliver det lidt kreativt:

if [ ! x = "x`find . -type f | ( while read a ; do grep path $a ; done )`" ]
then
   echo Fundet
fi

Men hvis kataloget kun indeholder filer, så er følgende jo
aldeles rigeligt:

grep path * > /dev/null
if [ $? -eq 0 ]
then
   echo Fundet
fi

Varianter af ovenstående kan også fortælle navnene på de pågældende
filer.

Mvh.
   Klaus.

N/A (16-11-2005)
Kommentar
Fra : N/A


Dato : 16-11-05 17:00



Adam Sjøgren (16-11-2005)
Kommentar
Fra : Adam Sjøgren


Dato : 16-11-05 16:08

On Wed, 16 Nov 2005 15:17:49 +0100, Kasper wrote:

> Adam Sjøgren wrote:

>> Prøv "grep path *"

> Det er fint nok, hvis der kun er et niveau, og der kun er filer.

Hvilket præcis var det tilfælde "Paminu" beskrev.

I forhold til at vedkommende havde problemer nok med begrebet standard
input syntes jeg ikke det var formålstjenligt at blande alskens andre
sjove ting ind i svaret.


Mvh.

--
"Lef ma nine imma Jeep" Adam Sjøgren
asjo@koldfront.dk

N/A (16-11-2005)
Kommentar
Fra : N/A


Dato : 16-11-05 16:32



Kasper Dupont (16-11-2005)
Kommentar
Fra : Kasper Dupont


Dato : 16-11-05 16:46

Adam Sjøgren wrote:
>
> On Wed, 16 Nov 2005 15:17:49 +0100, Kasper wrote:
>
> > Adam Sjøgren wrote:
>
> >> Prøv "grep path *"
>
> > Det er fint nok, hvis der kun er et niveau, og der kun er filer.
>
> Hvilket præcis var det tilfælde "Paminu" beskrev.

For mig lyder det ikke som om hun har overvejet, hvad
der skal ske, såfremt der er andet end filer.

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

Kim Hansen (16-11-2005)
Kommentar
Fra : Kim Hansen


Dato : 16-11-05 16:50

Klaus Ellegaard <klausellegaard@msn.com> writes:

> Kim Hansen <kimhanse@oek.dk> writes:
>
>>> find . -type f -print0 | xargs -0 grep
>
>>Det er vel stort set det samme som 'grep -r .'
>
> $ grep -r blah .
> grep: illegal option -- r
> Usage: grep -hblcnsviw pattern file . . .

Der blev tidligere i traaden skrevet at vi brugte GNU-tools.

--
Kim Hansen

Klaus Ellegaard (16-11-2005)
Kommentar
Fra : Klaus Ellegaard


Dato : 16-11-05 17:00

Kim Hansen <kimhanse@oek.dk> writes:

>Der blev tidligere i traaden skrevet at vi brugte GNU-tools.

Den uvane kan man vel godt hjælpe på at fikse?

Mvh.
   Klaus.

Kasper Dupont (16-11-2005)
Kommentar
Fra : Kasper Dupont


Dato : 16-11-05 18:32

Klaus Ellegaard wrote:
>
> Kim Hansen <kimhanse@oek.dk> writes:
>
> >Der blev tidligere i traaden skrevet at vi brugte GNU-tools.
>
> Den uvane kan man vel godt hjælpe på at fikse?

Til nogle opgaver er de GNU specifikke options den
bedste løsning. (Om det her er en af dem vil jeg
ikke udtale mig om med mindre Paminu giver en mere
præcis beskrivelse af kravene).

Og jeg kender ikke nogen Unix platform som GNU
værktøjerne ikke er porteret til.

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

Allan Joergensen (16-11-2005)
Kommentar
Fra : Allan Joergensen


Dato : 16-11-05 18:38

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

> Og jeg kender ikke nogen Unix platform som GNU
> værktøjerne ikke er porteret til.

Det er ikke ensbetydende med at det er installeret.

--
Allan Joergensen

"Hey, what's this button d..<BOOM>" -W. Crusher

Adam Sjøgren (16-11-2005)
Kommentar
Fra : Adam Sjøgren


Dato : 16-11-05 16:57

On Wed, 16 Nov 2005 16:46:11 +0100, Kasper wrote:

> For mig lyder det ikke som om hun har overvejet, hvad
> der skal ske, såfremt der er andet end filer.

I vedkommendes eksempel er der kun filer (10 styks), men hvis vi
*skal* fluekneppe: hvem siger at det kun er ikke-specielle filer i
mappen der ønskes gennemsøgt?


,

--
"Python, is a watered-down Lisp with infix syntax and Adam Sjøgren
no macros." asjo@koldfront.dk

Paminu (17-11-2005)
Kommentar
Fra : Paminu


Dato : 17-11-05 00:08


"Adam "Sjøgren"" <asjo@koldfront.dk> skrev i en meddelelse
news:87ek5glh5v.fsf@koldfront.dk...
> On Wed, 16 Nov 2005 16:46:11 +0100, Kasper wrote:
>
>> For mig lyder det ikke som om hun har overvejet, hvad
>> der skal ske, såfremt der er andet end filer.
>
> I vedkommendes eksempel er der kun filer (10 styks), men hvis vi
> *skal* fluekneppe: hvem siger at det kun er ikke-specielle filer i
> mappen der ønskes gennemsøgt?


Ok lad os prøve at udvide det til samtlige filer i samtlige mapper på hele
computeren...findes der en komando der kan klare det?



Carsten Keller (17-11-2005)
Kommentar
Fra : Carsten Keller


Dato : 17-11-05 09:18

"Paminu" <asdad@asd.com> wrote in message
news:dlge4t$bb3$1@news.net.uni-c.dk...
> Ok lad os prøve at udvide det til samtlige filer i samtlige mapper på hele
> computeren...findes der en komando der kan klare det?

Løsningen har vist allerede været på banen, men grep -R "søgeord" *. Hvis du
står i / skulle det medføre at den dribler gennem hele maskinen. Nok ikke
specielt pænt eller effektivt, men det er ok i en snæver vendning, specielt
hvis man ikke skal hele maskinen igennem.

Keller



Kent Friis (17-11-2005)
Kommentar
Fra : Kent Friis


Dato : 17-11-05 17:20

Den Thu, 17 Nov 2005 09:18:22 +0100 skrev Carsten Keller:
> "Paminu" <asdad@asd.com> wrote in message
> news:dlge4t$bb3$1@news.net.uni-c.dk...
>> Ok lad os prøve at udvide det til samtlige filer i samtlige mapper på hele
>> computeren...findes der en komando der kan klare det?
>
> Løsningen har vist allerede været på banen, men grep -R "søgeord" *. Hvis du
> står i / skulle det medføre at den dribler gennem hele maskinen. Nok ikke
> specielt pænt eller effektivt, men det er ok i en snæver vendning, specielt
> hvis man ikke skal hele maskinen igennem.

Brug altid "grep -r xyz ." i stedet for "grep -r xyz *" - den første vil
tage den mappe du står i, og alle undermapper, hvor den anden
vil springe over skjulte filer/mapper i den mappe du står i, men tage
dem med i undermapper, hvilket er forvirrende.

Og så naturligvis "grep -r xyz /" for at søge hele disken igennem.

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

Kasper Dupont (17-11-2005)
Kommentar
Fra : Kasper Dupont


Dato : 17-11-05 11:48

Paminu wrote:
>
> Ok lad os prøve at udvide det til samtlige filer i samtlige mapper på hele
> computeren...findes der en komando der kan klare det?

Så begynder det at blive lidt tricky. For at finde samtlige
filer er man nødt til at køre som root. Men det betyder så,
at læsning fra andet end regulære filer kan give betydelige
problemer. Desuden kan du også få problemer med pseudo
filsystemer som /proc. Og endeligt er du nok ikke
interesseret i at grepe gennem netværksfilsystemer. Så er
det bedre at logge ind på serveren og køre søgningen lokalt.

Derfor mener jeg den bedste løsning er at tage et filsystem
ad gangen. Brug find, xargs og grep som jeg nævnte tidligere,
men tilføj -xdev til find så den kun tager et filsystem. Her
er så lige et par detaljer man skal være opmærksom på. Den
kan af gode grunde ikke se filer, der evt. måtte være skjult
under et mountpoint. Og hvis man bruger bindmounts og har
et directory bindmountet til et mountpoint på samme filsystem
vil find køre hen over det mountpoint og derved gennemsøge
nogle filer mere end en gang.

For at gennemsøge / filsystemet ville jeg skrive noget i
retning af:
find / -xdev -type f -print0 | xargs -0 grep -il path

Options til grep betyder følgende: -i den er ligeglad med
store og små bogstaver, og -l den udskriver kun filnavnet
og ikke hver eneste linie. Dem kan du selvfølgelig droppe
hvis du ønsker.

Gentag derefter proceduren for andre filsystemer.

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

Paminu (18-11-2005)
Kommentar
Fra : Paminu


Dato : 18-11-05 08:39


"Kasper Dupont" <kasperd@daimi.au.dk> skrev i en meddelelse
news:437C5FC3.DAC10BCA@daimi.au.dk...
> Paminu wrote:
>>
>> Ok lad os prøve at udvide det til samtlige filer i samtlige mapper på
>> hele
>> computeren...findes der en komando der kan klare det?
>
> Så begynder det at blive lidt tricky. For at finde samtlige
> filer er man nødt til at køre som root. Men det betyder så,
> at læsning fra andet end regulære filer kan give betydelige
> problemer. Desuden kan du også få problemer med pseudo
> filsystemer som /proc. Og endeligt er du nok ikke
> interesseret i at grepe gennem netværksfilsystemer. Så er
> det bedre at logge ind på serveren og køre søgningen lokalt.
>
> Derfor mener jeg den bedste løsning er at tage et filsystem
> ad gangen. Brug find, xargs og grep som jeg nævnte tidligere,
> men tilføj -xdev til find så den kun tager et filsystem. Her
> er så lige et par detaljer man skal være opmærksom på. Den
> kan af gode grunde ikke se filer, der evt. måtte være skjult
> under et mountpoint. Og hvis man bruger bindmounts og har
> et directory bindmountet til et mountpoint på samme filsystem
> vil find køre hen over det mountpoint og derved gennemsøge
> nogle filer mere end en gang.
>
> For at gennemsøge / filsystemet ville jeg skrive noget i
> retning af:
> find / -xdev -type f -print0 | xargs -0 grep -il path
>
> Options til grep betyder følgende: -i den er ligeglad med
> store og små bogstaver, og -l den udskriver kun filnavnet
> og ikke hver eneste linie.


Ok men jeg er jo interesseret i både filnavne og om indholdet af filerne
indeholder det søgte ord.


Dem kan du selvfølgelig droppe
> hvis du ønsker.
>
> Gentag derefter proceduren for andre filsystemer.
>
> --
> Kasper Dupont
> Note to self: Don't try to allocate
> 256000 pages with GFP_KERNEL on x86.



Kasper Dupont (18-11-2005)
Kommentar
Fra : Kasper Dupont


Dato : 18-11-05 18:38

Paminu wrote:
>
> Ok men jeg er jo interesseret i både filnavne og om indholdet af filerne
> indeholder det søgte ord.

Det er nemt at finde filer, hvor navnet matcher, f.eks.:
find / -xdev -iname "*path*"
Udskift med -name hvis den skal betragte store og små bogstaver
som forskellige. Og så kan du selvfølgelig kombinere alle de
muligheder, der er blevet nævnt i tråden.

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

Kim Hansen (16-11-2005)
Kommentar
Fra : Kim Hansen


Dato : 16-11-05 19:38

Klaus Ellegaard <klausellegaard@msn.com> writes:

> Kim Hansen <kimhanse@oek.dk> writes:
>
>>Der blev tidligere i traaden skrevet at vi brugte GNU-tools.
>
> Den uvane kan man vel godt hjælpe på at fikse?

I mine oejne er det ikke en uvane at bruge de staerkeste tilgaengelige
vaerktoejer. Det er godt at kende alternativerne, men der er ingen
grund til at forvirre nybegyndere med dem.

--
Kim Hansen

Adam Sjøgren (17-11-2005)
Kommentar
Fra : Adam Sjøgren


Dato : 17-11-05 09:59

On Thu, 17 Nov 2005 00:07:47 +0100, Paminu wrote:

> Ok lad os prøve at udvide det til samtlige filer i samtlige mapper på hele
> computeren...findes der en komando der kan klare det?

Har du sprunget Kaspers indlæg her i tråden over?


Mvh.

--
"For hvad er vi uden viden om vores fortid? Blot Adam Sjøgren
fritsvævende atomer i et vægtløst univers" - Brian asjo@koldfront.dk
Mikkelsen, kulturminister

Kim Hansen (18-11-2005)
Kommentar
Fra : Kim Hansen


Dato : 18-11-05 00:44

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

> Paminu wrote:
>>
>> Ok lad os prøve at udvide det til samtlige filer i samtlige mapper på hele
>> computeren...findes der en komando der kan klare det?
>
[snip en forklaring med find, xargs og grep]

Helt enig, jeg har bare en lille tilfoejelse.

> Gentag derefter proceduren for andre filsystemer.

Det kan goeres i et hug, find tager flere paths som argument, f.eks.:
find / /home /usr /var -type f -print0 | ...

--
Kim Hansen

N/A (17-11-2005)
Kommentar
Fra : N/A


Dato : 17-11-05 00:08



N/A (17-11-2005)
Kommentar
Fra : N/A


Dato : 17-11-05 00:08



N/A (17-11-2005)
Kommentar
Fra : N/A


Dato : 17-11-05 00:08



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

Månedens bedste
Årets bedste
Sidste års bedste