Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: polo23 23 Května 2009, 18:38:47

Název: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: polo23 23 Května 2009, 18:38:47
Ahoj, chtel bych se zeptat jak to udelat kdyz chci najit vsechny soubory v systemu a nebo v urcitem adresari ktere obsahuji urcity textovy retezec? Jedine co me napada je grep -R 'retezec' *. Buhuzel to jsem zkousel a nefunguje mi to-nevim zda program tak dlouho pracuje ale disk vytizeny neni...
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: 8472 23 Května 2009, 21:23:40
ja skor pouzivam namiesto znaku apostrof ' uvodzovky " , ale neviem, s apostrofom nemam skusenost v tomto pripade, mozno to nevadi.

co keby si si to hladanie najskorej vyskusal v nejakom testovacom adresari s niecim co si tam pripravis na pokusy, aby si zistil co ti bude fungovat a co nie.

kazdopadne, ak das prehlavadat cely disk, tak urcite musis pocitat s tym ze to moze trvat dost dlho. a to na platforme nezalezi, ci to je linux alebo windows alebo nieco ine, ak zacnes prehladavat tisicky suborov na disku, tak to fakt zabije dost casu.
mozno by bolo dobre si skusit zmensit oblast ktoru prehliadas, povedzme len na nejake urcite adresare a pod.
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: premet 23 Května 2009, 21:27:16
Myslím, že by mělo fungovat
Kód: [Vybrat]
grep -lR retezec ~/to vytiskne soubory, které obsahují text "řetězec" v domovském adresáři
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: nettezzaumana 24 Května 2009, 00:00:35
hehe. hosi, vidim ze Vam chybi praxe ..

> grep 'rgrep' ~/.* 2>/dev/null
/home/kpt/.bashrc:alias rgrep="grep -rI "
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: polo23 24 Května 2009, 08:22:00
To nettezzaumana: ...a mohl by sji prosim jeste vysvetlit tu sysntaxi toho prikazu? Abych vedel co presne to znamena. Zda se mi ze na to ze chci najit nejaky retezec v souboru tam toho mas nejak moc. Jinak zkousel jsem grep -lR retezec ~/ a to najde ten soubor jen v pripade ze zadam cestu presne jinak ne:(
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: premet 24 Května 2009, 10:14:23
Co ti na tom nefunguje ? Je jasný , že musíš zadat cestu ve které se ten adresář nachází, adresáře o úroveň výš to prohledávat nebude  :).
Kód: [Vybrat]
[prema@fedora ~]$ grep -lR 'blablablabla' ~/test/
/home/prema/test/bla
/home/prema/test/blabla/blabla
Kód: [Vybrat]
[prema@fedora ~]$ grep -lR 'blablablabla' ~/Plocha/
/home/prema/Plocha/test/bla
/home/prema/Plocha/test/blabla/blabla
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: polo23 24 Května 2009, 16:43:50
No jasne ze to nebude vyhledavat v adresarich o uroven vys ale melo by to rphledat vsechny o urovene niz. Takze kdyz dam:
grep -lR 'blabla' / tak by to melo prohledat cely system ne? No a me to hledany retezec nenajde. Najde ho jen kdyz uvedu presny adresar. Treba tady priklad:

  grep -lR 'test serveru Apache' /
grep: varování: /usr/X11R6/bin/X11: smyčka pro rekurzivní průchod

grep: /usr/share/doc/bash/completion-contrib: není souborem ani adresářem
grep: /usr/share/doc/bash/README.bash_completion.gz: není souborem ani adresářem
grep: /usr/share/terminfo/k/kon2: není souborem ani adresářem
grep: /usr/share/java/saxonb-dom4j.jar: není souborem ani adresářem
grep: /usr/share/ppd/2-third-party: není souborem ani adresářem
grep: varování: /usr/bin/X11: smyčka pro rekurzivní průchod

grep: /usr/src/linux-headers-2.6.26-2-686/.tmp_versions: není souborem ani adresářem
grep: /usr/src/linux-headers-2.6.26-2-686/virt: není souborem ani adresářem
grep: /usr/lib/openoffice/basis-link/program/classes/bsh.jar: není souborem ani adresářem
grep: /usr/lib/openoffice/basis3.0/program/classes/bsh.jar: není souborem ani adresářem
grep: /usr/lib/python2.4/site-packages/python-support.pth: není souborem ani adresářem
grep: /usr/lib/jvm/java-6-openjdk/jre/lib/security/cacerts: není souborem ani adresářem
grep: /usr/lib/jvm/java-6-openjdk/man/ja: není souborem ani adresářem

Program neskonci proste zustane stat, HDD prestane hrabat. To je vse...
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: nettezzaumana 24 Května 2009, 17:09:31
@polo23

man grep ## parametr -I (velke i ne L) zpusobi ze to neprohledava binarni soubory, -r je 'recursive' ..
man alias
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: polo23 24 Května 2009, 17:51:12
dopadlo to uplne stejne jako v prechazejicim pripade:(
 
:/home/polo# grep -Ir 'test serveru Apache' /
grep: varování: /usr/X11R6/bin/X11: smyčka pro rekurzivní průchod

grep: /usr/share/doc/bash/completion-contrib: není souborem ani adresářem
grep: /usr/share/doc/bash/README.bash_completion.gz: není souborem ani adresářem
grep: /usr/share/terminfo/k/kon2: není souborem ani adresářem
grep: /usr/share/java/saxonb-dom4j.jar: není souborem ani adresářem
grep: /usr/share/ppd/2-third-party: není souborem ani adresářem
grep: varování: /usr/bin/X11: smyčka pro rekurzivní průchod

grep: /usr/src/linux-headers-2.6.26-2-686/.tmp_versions: není souborem ani adresářem
grep: /usr/src/linux-headers-2.6.26-2-686/virt: není souborem ani adresářem
grep: /usr/lib/openoffice/basis-link/program/classes/bsh.jar: není souborem ani adresářem
grep: /usr/lib/openoffice/basis3.0/program/classes/bsh.jar: není souborem ani adresářem
grep: /usr/lib/python2.4/site-packages/python-support.pth: není souborem ani adresářem
grep: /usr/lib/jvm/java-6-openjdk/jre/lib/security/cacerts: není souborem ani adresářem
grep: /usr/lib/jvm/java-6-openjdk/man/ja: není souborem ani adresářem

Tady se program sekne...prohledavani skonci.
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: starenka 24 Května 2009, 17:54:51
grep -lir 'oplzla opice' * (vsechny soubory v akt.adr rekurzivne)
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: polo23 24 Května 2009, 19:17:53
grep -lir 'test serveru' *
grep: lib/defoma/gs.d/dirs/fonts/AnjaliOldLipi-0.730.ttf: není souborem ani adresářem
grep: lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/AnjaliOldLipi-0.730.ttf: není souborem ani adresářem

I tentokrat to dopadlo stejne...disk se rozjel...pak se zastavil. Program neskoncil.
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: arrange 24 Května 2009, 21:36:04
grep -lir 'test serveru' *
grep: lib/defoma/gs.d/dirs/fonts/AnjaliOldLipi-0.730.ttf: není souborem ani adresářem
grep: lib/defoma/x-ttcidfont-conf.d/dirs/TrueType/AnjaliOldLipi-0.730.ttf: není souborem ani adresářem

I tentokrat to dopadlo stejne...disk se rozjel...pak se zastavil. Program neskoncil.

Problém nastává, když chceš procházet různé specializované adresáře, jako /proc, /dev apod. Pak, i když přidáš přepínač -I do grepu nebo -type f do find, může dojít k chybám. Když jsem to zkoušel, tak u mě se to zaseklo na
Kód: [Vybrat]
sudo grep -I neco /proc/kmsgale takových kandidátů bude asi víc.

Možným řešením je tyto adresáře z hledání vynechat, já to dělám takto
Kód: [Vybrat]
sudo find /etc /home /usr /var -type f -exec grep -Il 'co_hledam' '{}' \; (čili to mám naopak-vyjmenuji adresáře, který chci prohledat; grep -<velké i, malé L>)
Název: Re: Jak najit soubory ktere obsahuji urcity textovy retezec.
Přispěvatel: qUAKER 27 Května 2009, 15:05:38
grep -lir --exclude-dir={/proc,/sys} 'test serveru' /