Portál AbcLinuxu, 10. května 2025 05:30

Dotaz: BASH: find

15.2.2006 18:15 h7
BASH: find
Přečteno: 1367×
Odpovědět | Admin
Ahoj, snazim se napsat skrip ,ktery prochazi vetsi mnozstvi souboru (cca 4M) ,ty rozparsuje a na zaklade vysledku provede urcite akce.

Zatim mam reseni ,kdy "hloupe" vylistuji pomoci find soubory do txt a az v druhem kroku nactu soubory z txt a aplikuji na ne prikazy atd...

Dotaz: jak mam nacpat vice konstukci typu IF ELSE atd.. a prikazu za find -exec ??

...nejradeji bych pouzil vlastni bash funkce ,ale nevim jak na to.

ps: findu se nechci zbavit kvuli jeho parametrizaci a odolnosti ,ale precijenom nemate nekdo napsany odolny find v bashi?

Diky moc za kazdou radu

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.2.2006 19:35 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: BASH: find
Odpovědět | | Sbalit | Link | Blokovat | Admin
necham sice uplne presne co chces ale mozno je to prave nieco taketo:
for i in `find .`
do
  tu aplikujes tie prikazy na subory
done
15.2.2006 19:36 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: BASH: find
necham == nechapem
Řešení 1× (Tomáš Glabasňa)
15.2.2006 21:39 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: BASH: find
ten for je pěkně na (cenzurováno)

lepší (a narozdíl od for i funkční) je použít
find a jeho parametry | while read prom; do
 echo "tady si delej co chces s $prom"
done
-- Nezdar není hanbou, hanbou je strach z pokusu.
Josef Kufner avatar 15.2.2006 21:56 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: BASH: find
mno, tomu bych taky nevěřil...
find ... -print0 | xargs -0 neco
Pokud je potřeba dělat nějaké složitější akce, tak si napiš skript, který tu akci udělá na souborech, které se mu předají jako parametr a timhle to pak spust.
Hello world ! Segmentation fault (core dumped)
15.2.2006 21:59 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: BASH: find
mno, tomu bych taky nevěřil...

čemu nevěříš? Pokud chce na každý soubor aplikovat nějaká pravidla, tak mi tohle připadá lepší než spouštění zvláštního skriptu.
-- Nezdar není hanbou, hanbou je strach z pokusu.
16.2.2006 01:00 azurIt | skóre: 34 | blog: zatial_bez_mena
Rozbalit Rozbalit vše Re: BASH: find
nejednalo sa o kvalitu ale o napad..
15.2.2006 21:43 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: BASH: find
Odpovědět | | Sbalit | Link | Blokovat | Admin
find www/ -type f -perm 600 -exec 'chmod -c 755 {}' \;

Projeď adresář www a na všechny soubory co mají právo čtení a zápisu pouze pro vlastníka aplikuj příkaz chmod s následujícími parametry.

Jinak poradím jen jedno. Hledej šmudlo a koukni se taky na http://cs.wikibooks.org/wiki/Linux

Josef Kufner avatar 15.2.2006 21:57 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: BASH: find
To je ukrutně pomalé...
Hello world ! Segmentation fault (core dumped)
15.2.2006 22:16 h7
Rozbalit Rozbalit vše Re: BASH: find
Odpovědět | | Sbalit | Link | Blokovat | Admin
Diky moc za rady. Vase reseni pracuji takto: find najde vsechny soubory a na ty se potom aplikuje sada prikazu. Ja potrebuji v okamziku,kdy najdu urcity soubor ihned na nej aplikovat ma pravidla. Ano ,muzu si napsat druhy skript a ten potom spoustet pomoci -exec ,ale to neni ono. Nejradeji bych obsah tohoto skriptu vypsal nejak za -exec ,ale jak? h7
David Watzke avatar 15.2.2006 22:29 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: BASH: find
Ne, ne... s while read F to provádí hned jakmile je najde..
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
16.2.2006 08:33 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: BASH: find
No to bych tak s určitostí netvrdil. Spíš bych sázel na to, že se to začne provádět nejpozději, když je toho tolik, co zaplní blok jádra (buffer pipe). To je standardně 4kB. Nicméně, z toho co tu zaznělo bych to řešení považoval za jedno z nejlepších. Zbytečně se neforkuje jako při použití -exec. Nicméně si napsat vlastní script, který ale nebude pracovat s jedním souborem, ale pomocí shift (nebo for i; do ...; done) postupně zpracuje všechny parametry a použít ... -print0 | xargs -0 ... taky není vůbec špatný nápad (nicméně o chlup pomalejší než find | while read; do ... done). Nicméně pokud jde fakt o rychlost, tak bych použil třeba perl a File::Find.

P.S.: Debilky jako Azurit, kteří jen tak plácnou úplnou kravinu a pak to omlouvají tím, že to byl jen takový návrh radši vůbec nečti. To je vidět na první pohled, že pár miliónů souborů vživotě nespracovával a o fungování for i in `find` ví méně než nic (původně hovno).
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
16.2.2006 08:39 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: BASH: find
Jo, úplně bych zapoměl, gnu find má od nějaké verze možnost za -exec místo \; napsat + a to se pak chová jako -print0 | xargs -0
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
19.2.2006 17:04 Undefined | skóre: 6
Rozbalit Rozbalit vše Re: BASH: find
RE R.S.: To je sice pekny, ale kdyby tu meli odpovidat jenom naprosty odbornici, tak bych se dockal odpovedi na svuj dotaz tak za 5 let... nemuzu soudit jestli to je debilek nebo neni, ale aspon se snazil...tak mu nenadavej...ju ;-)
20.2.2006 12:14 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: BASH: find
RE R.S.: To je sice pekny, ale kdyby tu meli odpovidat jenom naprosty odbornici, tak bych se dockal odpovedi na svuj dotaz tak za 5 let...
Ničím nepodložená spekulace.
nemuzu soudit jestli to je debilek nebo neni, ale aspon se snazil...
Ne, nesnažil se. Jen tak plácnul první blobost co ho napadla. Kdyby ti poradil rm -rf /, tak budeš patrně taky šťastnej jak blecha.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
Stanislav Brabec avatar 20.2.2006 16:41 Stanislav Brabec | skóre: 45 | Praha
Rozbalit Rozbalit vše find v bashi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Základ pro find v bashi vypadá nějak takto:
# bash_find cesta action ...
# bude volat action ... soubor
shopt -s nullglob
shopt -s dotglob
function bash_find {
    local item
    local path="$1"
    shift
    if test -d "$path" ; then
        for item in "$path/"* ; do
            bash_find "$item" "$@"
        done
    else
        "$@" "$path"
    fi
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.