Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Hrátky z řádky: find to najde

KtK
KtK (neregistrovaný)
14. 4. 2008 7:47 Nový

LDP

celé vlákno
Kdyz odkazujete na dokumentacni projekt, neskodilo by dat nekam odkaz?
(treba zrovna na rootu je ve vice vydanich: http://knihy.root.cz/kniha/linux-dokumentacni-projekt-4-vydani/)
Fešák Hubert
14. 4. 2008 9:34 Nový

Cykly

celé vlákno
Místo xargs raději používám cyklus tj.

for i in `find *`; do echo $i; done;

Například přejmenování všech nalezených souborů, či nahrazení řetězce ve všech nalezených a podobné problémy se řeší snáze.
Občas může být užitečné předefinovat proměnnou prostředí IFS, kterou 'for' používá pro oddělení jednotlivých prvků seznamu.
Hanz
Hanz (neregistrovaný)
14. 4. 2008 11:54 Nový

Re: Cykly

celé vlákno
Mno me prijde mnohem flexibilnejsi:
find ~ "*" | while read l 
  do
    # a tady si muzu delat co chci ;o)
    echo $l
  done
Petr Macek aura:96
14. 4. 2008 22:03 Nový

Re: Cykly

celé vlákno
Ano, tohle vam nabidne vice moznosti pri zpracovani, ale na jednoduche ukoly je exec snazsi a xargs rychlejsi
still
still (neregistrovaný)
14. 4. 2008 15:38 Nový

Re: Cykly

celé vlákno
pri mazani a kopirovani vacsieho mnozstva suborov je rozdiel podstatny, vygeneroval som si 50 000 suborov cez mktemp a skusil som zmazat 3 sposobmy:

root@w4skkosy1000169:~/tmp/xxx$ ls | wc -l
50000

v cykle:
date; for i in $(find . -type f -size 0); do rm $i; done; date
Mon Apr 14 15:22:05 CEST 2008
Mon Apr 14 15:25:56 CEST 2008 - mazanie trvalo 3:51s

cez find -exec:
date; find . -type f -size 0 -exec rm {} \;; date
Mon Apr 14 15:30:44 CEST 2008
Mon Apr 14 15:33:07 CEST 2008 - zmazane za 2:23s

a nakoniec cez xargs:
date; find . -type f -size 0 | xargs rm; date
Mon Apr 14 15:38:04 CEST 2008
Mon Apr 14 15:38:05 CEST 2008 - zmazane za 1s :)

skusal som aj kopirovanie, podobny rozdiel.
ava
ava (neregistrovaný)
14. 4. 2008 16:45 Nový

Re: Cykly

celé vlákno
Kdyz tak pozoruju jak meris cas pomoci date, mozna te potesi existence prikazu time - zkus si napr.

time ls /etc
still
still (neregistrovaný)
15. 4. 2008 8:13 Nový

Re: Cykly

celé vlákno
Ahoj, ja som to otestoval, takze:

root@w4skkosy1000169:~/tmp/xxx$ time find . -type f -size 0 -exec rm {} \+

real 0m1.358s
user 0m0.108s
sys 0m1.224s

Zda sa ze je to to iste ako xargs, vdaka za typ :)
Petr Macek aura:96
14. 4. 2008 22:01 Nový

Re: Cykly

celé vlákno
a dal by se pridat jeste jeden zpusob. Find ma pozdeji pridanou vlastnost a tou je rm {} \+ Primo z man find, v sekci hledejte exec:
-exec utility [argument ...] {} +
             Same as -exec, except that ``{}'' is replaced with as many path-
             names as possible for each invocation of utility.  This behaviour
             is similar to that of xargs(1).
Mereni jsem ale neprovadel
still
still (neregistrovaný)
15. 4. 2008 8:15 Nový

Re: Cykly

celé vlákno
Zmeral som to, kuk hore.
uživatel si přál zůstat v anonymitě
14. 4. 2008 11:29 Nový

RE: Hrátky z řádky: find to najde

celé vlákno
"Vyhledá nám v aktuálním adresáři všechny soubory, které byly změněny dřív než soubor: $ find . -newer soubor" ktere jsou novejsi nez soubor, tedy byly zmeneny pozdeji nez soubor
mirozbiro
mirozbiro (neregistrovaný)
14. 4. 2008 15:52 Nový

Hledani stringu

celé vlákno
Kdyz hledam string delam to standartne takhle

find . -name "*C" -exec grep -ivH hledanyvyraz {} \;

neni to asi uplne nejkratsi (nebo ano?), ale clovek si zvykne.

Casto chci videt fily, co jsem zmenil pred rekneme 3mi dny - kvuli synchronizaci

find $HOME/Adr/ -type f -ctime -3 | xargs ls -lth

postupnou zmenou casu zjistim, od ktereho mista musim synchronizovat, nebot vystup radim
podle data...
Palo
Palo (neregistrovaný)
14. 4. 2008 21:40 Nový

Re: Hledani stringu

celé vlákno
Skus unison.
Petr Macek aura:96
14. 4. 2008 22:11 Nový

Re: Hledani stringu

celé vlákno
Ve vasem zapisu jsem nejak nepochopil ten parametr pro invert (-v)
Pokud hledate ve vsech *C souborech nejaky hledanyvyraz, tak ja bych to resil takhle:
grep -i hledanyvyraz *C
mirozbiro
mirozbiro (neregistrovaný)
15. 4. 2008 11:16 Nový

Re: Hledani stringu - ooops

celé vlákno
doslo k chybam - omlouvm se

jednak tam nema byt invert u grep (-v)
a jednak xargs ls -ltrh to udela pouze, pokud
find neco
najde

sorry
smajl
smajl (neregistrovaný)
14. 4. 2008 18:00 Nový

-delete

celé vlákno
nebolo by lepsie na vymazanie suborov vyhovujucim hladaniu pouzit -delete ?

$ find / -name "*.bak" -exec rm -f {} \;

nahradit

$ find / -name "*.bak" -delete;
Petr Macek aura:96
14. 4. 2008 22:15 Nový

Re: -delete

celé vlákno
Ano, mate pravdu. Bohuzel clanek ma omezenou delku a vse se do nej proste nevejde, nelze rozebirat kazdy parametr.
-delete je asi o trosku bezpecnejsi, viz. manual
uživatel si přál zůstat v anonymitě
14. 4. 2008 19:40 Nový

find datum_od datum_do

celé vlákno
Uz jsem nekolikrat potreboval nalezt soubory upravovane mezi urcitymi dvema daty, napr. "2008-02-01" a "2008-03-01", ale s findem ci mc je to neschudne, jde to ale napr. s konquerorem. Jak se da tenhle problem vyresit pomoci findu ci jine GNU utility?
Palo
Palo (neregistrovaný)
14. 4. 2008 22:05 Nový

Re: find datum_od datum_do

celé vlákno
Skus taketo 'compare':
____________________________________
#!/bin/bash

f1=`mktemp`
f2=`mktemp`

find . -type f -newermt "$1" > $f1
find . -type f -newermt "$2" > $f2

diff f1 f2 | grep '^<' | cut -c 3-
rm -rf $f1 $f2
____________________________________

compare '2 weeks ago' '1 week ago'
Palo
Palo (neregistrovaný)
14. 4. 2008 22:14 Nový

Re: find datum_od datum_do

celé vlákno
%s/diff f1 f2/diff $f1 $f2/
XX
XX (neregistrovaný)
14. 4. 2008 22:42 Nový

Re: find datum_od datum_do

celé vlákno
find . -mtime -5 -mtime +3 -ls
Novsi nez 5 dni a (AND) starsi nez 3 dny,
zas tak neschudne mi to nepride.
petr
petr (neregistrovaný)
15. 4. 2008 18:55 Nový

Re: find datum_od datum_do

celé vlákno
To ziram, vy date z hlavy pocet dni mezi dneskem a libovolnym datem v minulosti, trebas "1999-09-09"? A nemel byste radu pro obycejne uzivatele, jak tohohle dosahnout pomoci nejakeho bezneho programu? Aby bylo mozne udelat nejaky jednoduchy skript, trebas:

a=DATE_TO_DAYS($1)
b=DATE_TO_DAYS($2)
find . -type f -NEWERTHAN $a --and -type f -OLDERTHAN $b > $f1
Petr
Petr (neregistrovaný)
16. 4. 2008 18:21 Nový

Re: find datum_od datum_do

celé vlákno
Hm... Na svych strojich bych to delal podle hesla "kdyz uz jdeme na vrabce, tak potrebujeme opravdu PORADNY kanon" a v sqlplus bych selectoval potrebna cisla z DUALu. :-) Ale jinak konverze datumu v Perlu preci neni problem a mame datumy v sekundach od epochy a intervaly v sekundach.
XX
XX (neregistrovaný)
16. 4. 2008 22:41 Nový

Re: find datum_od datum_do

celé vlákno
Neco jako tohle to spocita za mne ;-)

a=$((($(date "+%s")-$(date -d "$1" "+%s"))/24/3600))
b=$((($(date "+%s")-$(date -d "$2" "+%s"))/24/3600))
find . -type f -NEWERTHAN $a --and -type f -OLDERTHAN $b
Ivan
Ivan (neregistrovaný)
15. 4. 2008 17:40 Nový

RE: Hrátky z řádky: find to najde

celé vlákno
Toto by spravne malo byt opacne:
find . -type d -maxdepth 1 ==> find . -maxdepth 1 -type d
fok
fok (neregistrovaný)
20. 4. 2008 23:13 Nový

xargs

celé vlákno
S xargs je to trochu jinak. Pokud použiji xargs, tak se skutečně vykoná příkaz rm jen jednou. Jenže pokud mi find najde těch souborů více, tak to co se nevejde do limitu (nikoliv 5000, ale limit příkazové řádky) se prostě nevykoná.
Jinak díky za zajímavé počtení.
Petr Macek aura:96
21. 4. 2008 8:53 Nový

Re: xargs

celé vlákno
neni xargs jako xargs, muj rika:
-n number
Set the maximum number of arguments taken from standard input for
each invocation of utility....
... The current default value for number is 5000.
BASH
BASH (neregistrovaný) ---.buk.cvut.cz
3. 11. 2010 18:58 Nový

Re: Hrátky z řádky: find to najde

celé vlákno

Ahoj, potreboval bych poradit ohledne vyhledavani v bashi. Pisu skript, ktery v zadanem adresari a jeho podadresarich identifikuje skripty a vypise jejich cestu + nazev skriptu. Vyhledani skriptu by se melo proves pres vyhledani nazvu skriptu na prvnim radku (napr.: "#!/bin/bash" nebo perl,awk,...)

napr.: pokud zadam adresar "script" vypise muj bashovsky skript toto:

/home/my/scrip­t/aaa.sh bash
/home/my/scrip­t/first/bbb.pl perl
/home/my/scrip­t/second/ccc.sh bash

Zatim sem se dostal k tomuhle:

find $nazev_adresare -exec grep -H -l "bash" '{}' \;
- tohle ovsem nevyhledava pouze na prvni radku takze bych do toho potreboval nejak implementovat "| head -n 1" bohuzel nemuzu prijit na to jak?
- navic bych chtel aby to vypsalo i typ skriptu nejen cestu k souboru jak je videt v prikladu

Pokud byste meli nejakou radu diky

BASH
BASH (neregistrovaný) ---.buk.cvut.cz
3. 11. 2010 19:03 Nový

find-grep skript

celé vlákno

Ahoj, potreboval bych poradit ohledne vyhledavani v bashi. Pisu skript, ktery v zadanem adresari a jeho podadresarich identifikuje skripty a vypise jejich cestu + nazev skriptu. Vyhledani skriptu by se melo proves pres vyhledani nazvu skriptu na prvnim radku (napr.: "#!/bin/bash" nebo perl,awk,...)

napr.: pokud zadam adresar "script" vypise muj bashovsky skript toto:

/home/my/scrip­t/aaa.sh bash
/home/my/scrip­t/first/bbb.pl perl
/home/my/scrip­t/second/ccc.sh bash

Zatim sem se dostal k tomuhle:

find $nazev_adresare -exec grep -H -l "bash" '{}' \;
- tohle ovsem nevyhledava pouze na prvni radku takze bych do toho potreboval nejak implementovat "| head -n 1" bohuzel nemuzu prijit na to jak?
- navic bych chtel aby to vypsalo i typ skriptu nejen cestu k souboru jak je videt v prikladu

Pokud byste meli nejakou radu diky

Zasílat nově přidané příspěvky e-mailem