/ 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
finde bestemt fil på bestemt placering,
Fra : Martin Jørgensen


Dato : 28-09-05 21:19

Hej NG.

Jeg har brug for at finde en/flere bestemte filer på bestemte placering
i et bibliotek, med bestemt indhold. Eks:


I biblioteket bib ligger en hel masse underbiblioteker:

bib: {under1, under2, under3, under4, bla5, bla6, blabla7, osv}

Inde under *hvert* af disse underbibliotker ligger flere mapper, men den
særlige mappe der skal bruges har navnet "constants". I denne mappe
ligger filerne: {boundary, start} og jeg har brug for at søge kun i
disse filer i alle underbibliotekerne og finde filen med indholdet
"vigtigt_eksempel" (boundary og start er tekstfiler).

Hvordan finder jeg filen/filerne med dette indhold uden at søge alle de
mange mb igennem, så der kun søges i disse 2 tekstfiler under hvert
bibliotek?


Med venlig hilsen / Best regards
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

 
 
Jacob Sparre Anderse~ (29-09-2005)
Kommentar
Fra : Jacob Sparre Anderse~


Dato : 29-09-05 11:07

Martin Jørgensen skrev:

> Jeg har brug for at finde en/flere bestemte filer på bestemte
> placering i et bibliotek, med bestemt indhold. Eks:
>
> I biblioteket bib ligger en hel masse underbiblioteker:
>
> bib: {under1, under2, under3, under4, bla5, bla6, blabla7, osv}
>
> Inde under *hvert* af disse underbibliotker ligger flere mapper, men den
> særlige mappe der skal bruges har navnet "constants". I denne mappe
> ligger filerne: {boundary, start} og jeg har brug for at søge kun i
> disse filer i alle underbibliotekerne og finde filen med indholdet
> "vigtigt_eksempel" (boundary og start er tekstfiler).

find $(find bib -maxdepth 2 -type d -name constants) \
-type f \( -name boundary -o -name start \) \
| xargs grep -l "vigtigt_eksempel"

Jacob
--
- Kan jeg få en returbillet?
- Ja. Hvortil?
- Hertil, naturligvis.

Martin Jørgensen (29-09-2005)
Kommentar
Fra : Martin Jørgensen


Dato : 29-09-05 14:49

Jacob Sparre Andersen wrote:
> Martin Jørgensen skrev:
-snip-

> find $(find bib -maxdepth 2 -type d -name constants) \
> -type f \( -name boundary -o -name start \) \
> | xargs grep -l "vigtigt_eksempel"

Hej Jakob.

Du er jo *RABLENDE* genial

Tusind tak for hjælpen. Det sparede mig godtnok en helvedes tid og jeg
ville aldrig selv have kunnet finde ud af det... Nogen der meget
hurtigt/kort kan forklare hvordan det virker, sådan til fremtidig brug?
- der er sikker andre end mig der kan lære noget her...


Med venlig hilsen / Best regards
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Martin Jørgensen (29-09-2005)
Kommentar
Fra : Martin Jørgensen


Dato : 29-09-05 14:58

Jacob Sparre Andersen wrote:
> Martin Jørgensen skrev:
-snip-

> find $(find bib -maxdepth 2 -type d -name constants) \
> -type f \( -name boundary -o -name start \) \
> | xargs grep -l "vigtigt_eksempel"
>
> Jacob

Det er en ren fornøjelse at jeg lige vha. af ovenstående har gennemsøgt
456 biblioteker og 1168 filer på få sekunder, og fundet de vigtige ting,
jeg ledte efter og at jeg i fremtiden kan gøre det samme med andre ting
i samme biblioteker


Med venlig hilsen / Best regards
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Thorbjoern Ravn Ande~ (29-09-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 29-09-05 16:39

Martin Jørgensen <unoder.spam@spam.jay.net> writes:

> Det er en ren fornøjelse at jeg lige vha. af ovenstående har
> gennemsøgt 456 biblioteker og 1168 filer på få sekunder, og fundet de
> vigtige ting, jeg ledte efter og at jeg i fremtiden kan gøre det samme
> med andre ting i samme biblioteker

Unix er ret rå til tekstfiler.

Sædvanligvis har de fleste kommandoer en manualside. Fx "man find".
--
Thorbjørn Ravn Andersen


Dennis Jørgensen (29-09-2005)
Kommentar
Fra : Dennis Jørgensen


Dato : 29-09-05 12:22

Martin Jørgensen <unoder.spam@spam.jay.net> writes:


> Inde under *hvert* af disse underbibliotker ligger flere mapper, men den
> særlige mappe der skal bruges har navnet "constants". I denne mappe
> ligger filerne: {boundary, start} og jeg har brug for at søge kun i
> disse filer i alle underbibliotekerne og finde filen med indholdet
> "vigtigt_eksempel" (boundary og start er tekstfiler).
>
> Hvordan finder jeg filen/filerne med dette indhold uden at søge alle de
> mange mb igennem, så der kun søges i disse 2 tekstfiler under hvert
> bibliotek?

En eller anden besværgelse med find/locate, xargs og grep burde kunne
gøre det.


Mvh.


Dennis Jørgensen

Jacob Sparre Anderse~ (29-09-2005)
Kommentar
Fra : Jacob Sparre Anderse~


Dato : 29-09-05 16:29

Martin Jørgensen skrev:
> Jacob Sparre Andersen skrev:
>> Martin Jørgensen skrev:

>> find $(find bib -maxdepth 2 -type d -name constants) \
>> -type f \( -name boundary -o -name start \) \
>> | xargs grep -l "vigtigt_eksempel"

> Nogen der meget hurtigt/kort kan forklare hvordan det virker, sådan
> til fremtidig brug?

`find bib -maxdepth 2 -type d -name constants` gennemsøger kataloget
»bib« til dybden 2 i underkataloger (»-maxdepth 2«) og interesserer
sig kun for kataloger (»-type d«) der hedder »constants«.

I det denne kommando blev skrevet indeni »$()«, blev uddata fra
kommandoen (altså listen med kataloger der hedder »constants«) sat ind
i stedet for »$(...)«. Det betyder så at `find $(...)` bruger disse
kataloger som udgangspunkter for sin søgning. Denne gang begrænser vi
os til filer (»-type f«) der enten hedder »boundary« eller »start«.

Med »|« kanaliserer vi så den resulterende filliste videre til den
næste kommando.

`xargs` er et lidt specielt program. Det tager sine inddata (der i
dette tilfælde kommer fra den foranstående `find`-kommando) og bruger
dem som kommandolinjeargumenter til den kommando det har fået som
kommandolinjeargument. `xargs grep -l "vigtigt_eksempel"` vil altså
køre `grep -l "vigtigt_eksempel" fil_fra_find_1 fil_fra_find_2 ...`.

Kommandolinjetilvalget »-l« gør at `grep` nøjes med at udskrive navnet
på de filer, hvor det har fundet det søgte mønster.

[ læs mere i <http://cvs.linuxbog.dk/unix/bog/> ]

Jacob
--
»forskellen er at man har fastslået at han er kriminel. Man har for tidligere
folk i jobbet blot undgået at der blev taget stilling til spørgsmålet.«
»Men gør det så Silvio til en bedre eller en ringere statsminister?«
»se på det som forbedret varedeklaration.«

Martin Jørgensen (30-09-2005)
Kommentar
Fra : Martin Jørgensen


Dato : 30-09-05 23:00

Jacob Sparre Andersen wrote:
> Martin Jørgensen skrev:
-snip-

> `find bib -maxdepth 2 -type d -name constants` gennemsøger kataloget
> »bib« til dybden 2 i underkataloger (»-maxdepth 2«) og interesserer
> sig kun for kataloger (»-type d«) der hedder »constants«.
>
> I det denne kommando blev skrevet indeni »$()«, blev uddata fra
> kommandoen (altså listen med kataloger der hedder »constants«) sat ind
> i stedet for »$(...)«. Det betyder så at `find $(...)` bruger disse
> kataloger som udgangspunkter for sin søgning. Denne gang begrænser vi
> os til filer (»-type f«) der enten hedder »boundary« eller »start«.

Det er smart.

> Med »|« kanaliserer vi så den resulterende filliste videre til den
> næste kommando.

Ja, det er den letteste del af det.

> `xargs` er et lidt specielt program. Det tager sine inddata (der i
> dette tilfælde kommer fra den foranstående `find`-kommando) og bruger
> dem som kommandolinjeargumenter til den kommando det har fået som
> kommandolinjeargument. `xargs grep -l "vigtigt_eksempel"` vil altså
> køre `grep -l "vigtigt_eksempel" fil_fra_find_1 fil_fra_find_2 ...`.
>
> Kommandolinjetilvalget »-l« gør at `grep` nøjes med at udskrive navnet
> på de filer, hvor det har fundet det søgte mønster.
>
> [ læs mere i <http://cvs.linuxbog.dk/unix/bog/> ]

Takker. Men de har vist ikke sådan nogle avancerede eksempler, såvidt
jeg kan se.

Jeg har kigget lidt på afsnit 4.4.2 + 4.8.14. xargs, fordi mit næste
projekt, som ikke er særligt omfattende må blive at slette alle
biblioteker undtaget: "0", "constant", "system" og den sidste kalder vi
bare "data", på en bestemt placering, f.eks. når jeg står i
/home/martin/prog/vigtigt_sted.

Når jeg kører en flow-simulering kommer programmet dernæst med en masse
data i form af tids-biblioteker. Disse resultater skal slettes, dvs.
alle andre end de 4 ovennævnte biblioteker, skal slettes med en rm -r.
Det sker hver gang man ændrer start-betingelser...

Det her bliver ikke særligt pænt, men hvad med noget i stil med:

$(find /home/martin/prog/vigtigt_sted -maxdepth 1 -type d )

på en eller anden måde i kombination med en "xargs rm -r", men det jeg
så ikke kan finde ud af - er hvordan man ekskluderer bibliotekerne "0",
"constant", "system" og "data" fra at få en rm -f på sig...?


Med venlig hilsen / Best regards
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Martin Jørgensen (02-10-2005)
Kommentar
Fra : Martin Jørgensen


Dato : 02-10-05 13:57

Martin Jørgensen wrote:
> Jacob Sparre Andersen wrote:
-snip-

> Jeg har kigget lidt på afsnit 4.4.2 + 4.8.14. xargs, fordi mit næste
> projekt, som ikke er særligt omfattende må blive at slette alle
> biblioteker undtaget: "0", "constant", "system" og den sidste kalder vi
> bare "data", på en bestemt placering, f.eks. når jeg står i
> /home/martin/prog/vigtigt_sted.

1) Okay. Det kom vi ikke videre med. Er der nogen andre internationale
grupper hvor denne slags linux-spørgsmål om shell-scripts og lignende
hører hjemme? Ellers bliver jeg nødt til at prøve en masse forsk. grupper.

2) En anden ting jeg har brug for, er et script der går ind i hvert
under-bibliotek (evt: de skal sorteres nummereret, men det er de vistnok
i forvejen) og finder filen fil.dat (det er den samme i hvert bibl) og
udtrækker f.eks. linje nr. 25 og tilføjer denne til en >> output.dat,
som derved indeholder én linje fra filen i hvert underbib.

Jeg har kigget på tail og head men...

Hvilken nyhedsgruppe kan hjælpe her? Og har i lignende eksempler,
modtager jeg gerne links.


Med venlig hilsen / Best regards
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Thorbjoern Ravn Ande~ (02-10-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 02-10-05 18:20

Martin Jørgensen <unoder.spam@spam.jay.net> writes:

> Jeg har kigget på tail og head men...

Lær Perl.
--
Thorbjørn Ravn Andersen

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


Dato : 03-10-05 10:17

Martin Jørgensen skrev:
> Jacob Sparre Andersen skrev:

>> [ læs mere i <http://cvs.linuxbog.dk/unix/bog/> ]
>
> Takker. Men de har vist ikke sådan nogle avancerede eksempler,
> såvidt jeg kan se.

Det er ikke specielt avanceret. Unix bygger på et legoklodsagtigt
princip, hvor du kanaliserer data fra et program til et andet, hvis du
skal lave noget som et enkelt program ikke kan klare.

> Jeg har kigget lidt på afsnit 4.4.2 + 4.8.14. xargs, fordi mit næste
> projekt, som ikke er særligt omfattende må blive at slette alle
> biblioteker undtaget: "0", "constant", "system" og den sidste kalder
> vi bare "data", på en bestemt placering, f.eks. når jeg står i
> /home/martin/prog/vigtigt_sted.

Det lyder lidt som `find . -type d | egrep -v '^/(0|constant|system)$'
| xargs rm -rf`.

> $(find /home/martin/prog/vigtigt_sted -maxdepth 1 -type d )
>
> på en eller anden måde i kombination med en "xargs rm -r", men det jeg
> så ikke kan finde ud af - er hvordan man ekskluderer bibliotekerne "0",
> "constant", "system" og "data" fra at få en rm -f på sig...?

Med `egrep`.

Jacob
--
Billeder fra Færøerne:
http://billeder.jacob-sparre.dk/The_Faroe_Islands/

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


Dato : 03-10-05 10:20

Martin Jørgensen skrev:

> Er der nogen andre internationale grupper hvor denne slags
> linux-spørgsmål om shell-scripts og lignende hører hjemme?

Prøv om du ikke kan finde en passende
»comp.et-eller-andet.unix«-gruppe.

> 2) En anden ting jeg har brug for, er et script der går ind i hvert
> under-bibliotek (evt: de skal sorteres nummereret, men det er de
> vistnok i forvejen) og finder filen fil.dat (det er den samme i
> hvert bibl) og udtrækker f.eks. linje nr. 25 og tilføjer denne til
> en >> output.dat, som derved indeholder én linje fra filen i hvert
> underbib.
>
> Jeg har kigget på tail og head men...

head -${linjenummer} "${fil}" | tail -1 >> "${samling}"

Jacob
--
»Hvad mon han så vil skabe i fremtiden?«
»Sig.«

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

Månedens bedste
Årets bedste
Sidste års bedste