Ahoj,
mám bash skript a příkaz find jež je součástí "for" cyklu ,ůže naleznou třeba i desítky tisíc souborů, tak mě zajímá jestli je to možná takto použít pokud mám asi 6gb volné RAM a nepříliš rychlý disk na cachování.
for filepath in $(find /home ***);do
for phrasse in $(cat phrasses);do
grepout=$(grep ***)
if [[ "$grepout" == *"some phrasse"* ]];then
echo "phrasse found in $filepath"
fi
done
done
$(find /home ***) -- to je ta proměnná kde bude hodně výsledků
Citace od: fotka kdy 06. 11. 2014, 23:07:03
for phrasse in $(cat phrasses);do
A saphra! ;D
ano
Nejde jen o to, že dat bude hodně. Problém je i v tom, jak zjistit, kde jeden název končí a jiný začíná – názvy můžou obsahovat mezery...
Lepší je nepoužívat cyklus a proměnné, ale zpracovat to proudově, předat přes rouru. Jak find, tak xargs umí hodnoty oddělené nulovým bajtem:
find auto/ -print0 | xargs -0 -L 1 echo
Jen hodně rychle orientačně: řekněme, že jeden znak má jeden bajt. Jeden soubor asi nebude mít v průměru delší cestu, než třicet znaků. Krát deset tisíc, to je něco ke 300 KiB. Kolik paměti sežere Bash? ::)
Spíš bych se bál, jestli procesor rovnou nespáchá sebevraždu, pokud mu naservíruješ pár vnořených cyklů s desítkami tisíc iterací v každém. 8)
A nechces nam rict k cemu to chces pouzit ? proc mam pocit ze to chces pouzit na vyhledani fraze v X souborech ? (Kod jsem tak bez premysleni prejel ocima)
grep -R "find me" ./folder/lotofiles
ti nestaci ?
Citace od: fotka kdy 06. 11. 2014, 23:07:03
for phrasse in $(cat phrasses);do
grepout=$(grep ***)
if [[ "$grepout" == *"some phrasse"* ]];then
echo "phrasse found in $filepath"
fi
done
grep -E "(první|druhá|třetí)" je rychlejší. A pro ještě rychlejší hledání je tu http://ss64.com/bash/fgrep.html.
Doporučuju podívat se na grep -f a find -exec, v tomto pořadí.
mam dotaz neslo by aby fotka mel vlastni vlakno na forum.root.cz neco ve smyslu "hloupe a jeste hloupejsi dotazi administratora" nebo mozna ve zkratce "bastleni pro profiky aneb je nam jedno jak dlouho script pobezi a kolik vezme systemovych prostredku hlavne ze to ma spoustu radku a je co prezentovat"
Vypise mena suborov, ktore obsahuju "search pattern":
find /home -exec grep -l "search pattern" {} \;
Fotka uz svoje tema ma http://forum.root.cz/index.php?topic=9861.msg108336#msg108336 tak by si mel hrat tam chlapec, stejne nechapu proc se tady porad pta, kdyz navstevuje 15 dalsich linux for, asi se mu uz vsude jinde taky vysmali.
děkuji za příklady příkazů, já ale potřebuji vyhledat asi 20 frází, které obsahují lomítka, oba druhy uvozovek, středníky a lomené závorky.. nevím jak bych to dal do těch Vašich grepů.. a find -execů
Citace od: fotka kdy 22. 11. 2014, 12:27:10
děkuji za příklady příkazů, já ale potřebuji vyhledat asi 20 frází, které obsahují lomítka, oba druhy uvozovek, středníky a lomené závorky.. nevím jak bych to dal do těch Vašich grepů.. a find -execů
http://lmgtfy.com/?q=linux+man+fgrep
Takže bych měl použít například find a jako hodnotu -exec dát: fgrep -f /soubor_s_vecmi_co_najit_v_souborech ?
a výsledek toho findu budou cesty k souborům které obsahují všechny ty věci co chci hledat? je to efektivní způsob?
(ten find má hodně parametrů, potřebuju ho, grep -Ril asi nemůžu použít protože chci grepovat jen určité soubory (malé, změněné nedávno, s určitou příponou apod..)
Citace od: fotka kdy 22. 11. 2014, 21:50:22
Takže bych měl použít například find a jako hodnotu -exec dát: fgrep -f /soubor_s_vecmi_co_najit_v_souborech ?
a výsledek toho findu budou cesty k souborům které obsahují všechny ty věci co chci hledat? je to efektivní způsob?
(ten find má hodně parametrů, potřebuju ho, grep -Ril asi nemůžu použít protože chci grepovat jen určité soubory (malé, změněné nedávno, s určitou příponou apod..)
Přečetl sis nějaký ten man?
Zkusil's něco? Co to udělalo?
Pokud víš, že ty Tvoje patterny nebudou nějaké 'hi-fi' regulární výrazy, použij fgrep (grep -F ...), jinak ten egrep (grep -E ...).
https://www.google.cz/search?hl=cs&as_q=using+find+and+egrep (https://www.google.cz/search?hl=cs&as_q=using+find+and+egrep)
Citace od: fotka kdy 22. 11. 2014, 21:50:22
...
a výsledek toho findu budou cesty k souborům které obsahují všechny ty věci co chci hledat? je to efektivní způsob?
Co si představuješ pod pojmem efektivní v tomto případě?