Velká proměnná v bashi, jak to udělat lépe?

fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
Velká proměnná v bashi, jak to udělat lépe?
« kdy: 06. 11. 2014, 23:07:03 »
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í.

Kód: [Vybrat]
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
« Poslední změna: 07. 11. 2014, 12:38:13 od Petr Krčmář »
Linux nováček - CeskeForum.com


fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
Re:Hrozně velká proměnná bash skriptu, jak to udělat lépe?
« Odpověď #1 kdy: 06. 11. 2014, 23:07:59 »
$(find /home ***)  -- to je ta proměnná kde bude hodně výsledků
Linux nováček - CeskeForum.com

Lol Phirae

Re:Hrozně velká proměnná bash skriptu, jak to udělat lépe?
« Odpověď #2 kdy: 06. 11. 2014, 23:16:45 »
for phrasse in $(cat phrasses);do

A saphra!  ;D

perceptron

Re:Hrozně velká proměnná bash skriptu, jak to udělat lépe?
« Odpověď #3 kdy: 06. 11. 2014, 23:20:11 »
ano

Franta <xkucf03/>

Re:Hrozně velká proměnná bash skriptu, jak to udělat lépe?
« Odpověď #4 kdy: 06. 11. 2014, 23:24:43 »
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


Zopper

  • *****
  • 657
    • Zobrazit profil
Re:Hrozně velká proměnná bash skriptu, jak to udělat lépe?
« Odpověď #5 kdy: 06. 11. 2014, 23:27:55 »
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)

Sadam

Re:Hrozně velká proměnná bash skriptu, jak to udělat lépe?
« Odpověď #6 kdy: 07. 11. 2014, 01:37:46 »
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 ?

Jenda

Re:Hrozně velká proměnná bash skriptu, jak to udělat lépe?
« Odpověď #7 kdy: 07. 11. 2014, 03:42:45 »
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.

_pepak

Re:Hrozně velká proměnná bash skriptu, jak to udělat lépe?
« Odpověď #8 kdy: 07. 11. 2014, 06:43:29 »
Doporučuju podívat se na grep -f a find -exec, v tomto pořadí.

karel

Re:Hrozně velká proměnná bash skriptu, jak to udělat lépe?
« Odpověď #9 kdy: 07. 11. 2014, 11:42:52 »
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"

CyberBob

Re:Velká proměnná v bashi, jak to udělat lépe?
« Odpověď #10 kdy: 07. 11. 2014, 14:13:15 »
Vypise mena suborov, ktore obsahuju "search pattern":

find /home -exec grep -l "search pattern" {} \;

#

Re:Velká proměnná v bashi, jak to udělat lépe?
« Odpověď #11 kdy: 07. 11. 2014, 17:48:26 »
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.

fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
Re:Velká proměnná v bashi, jak to udělat lépe?
« Odpověď #12 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ů
Linux nováček - CeskeForum.com

Re:Velká proměnná v bashi, jak to udělat lépe?
« Odpověď #13 kdy: 22. 11. 2014, 14:20:01 »
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

fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
Re:Velká proměnná v bashi, jak to udělat lépe?
« Odpověď #14 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..)
Linux nováček - CeskeForum.com