Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Jurop 10. 06. 2017, 16:49:53
-
Dobry den,
mozno by mi niekto vedel poradit. Nieco som uz poskusal ale vysledok nieje.
Cez find by som chcel najst posledny pridany subor v adresare napr. z dna 22.5. Podla toho vyhladat vsetky subory pridane v ten den.
Nasledne vytvorit symlinky na tieto subory do ineho adresara (../najnovsie/)
Dakujem za radu
-
no a co mas teda? co treba takto?
for i in "find adresar -type f -mtime +0"; do
ln -s ${i} /kam/chci/linky
done
-
no a co mas teda? co treba takto?
for i in "find adresar -type f -mtime +0"; do
ln -s ${i} /kam/chci/linky
done
Je tam nutný ten for cyklus? Není lepší použít exec parametr příkazu find?
-
to by asi slo, ja nevedel, jak se ln tvari na vice argumentu, ale asi to projde
find adresar -type f -mtime +0" -print0 | xargs -0 -I {} ln -s {} /kam/chci/linky
-
jeste bez te jedne ", nejak mi to tam zustalo
-
to by asi slo, ja nevedel, jak se ln tvari na vice argumentu, ale asi to projde
find adresar -type f -mtime +0" -print0 | xargs -0 -I {} ln -s {} /kam/chci/linky
Je xargs nutný? Takhle by to nefungovalo? :)
find adresar -type f -mtime +0 -exec ln -s {} /kam/chci/linky \;
-
xargs je obecně lepšejší ;D umí divný soubory s mezerou třeba, jenom nevím, jestli se nemusí obalit {} uvozovkama nebo tak
-
Zkoušel jsem postup bez xargs na souboru
touch "divny soubor..\@"
A podle všeho to s mezerou nemá problém. Pokud použiju xargs bude to pomalejší :)
-
Zkoušel jsem postup bez xargs na souboru
touch "divny soubor..\@"
A podle všeho to s mezerou nemá problém.
To bude asi tím že tam žádné mezera není. ::) #facepalm
-
To bude asi tím že tam žádné mezera není. ::)
a mezi y a s je co? veverka? :-D
-
lolek: mesera tam je :o
david: jo, funguje to i tak, ale proc by jako pro lolka mel byt xargs pomalejsi?
time find / -xdev -type f -iname '*' -print0 | xargs -0 ls -l >/dev/null
real 0m10.280s
user 0m6.004s
sys 0m4.200s
time find / -xdev -type f -iname '*' -exec ls -l {} \; >/dev/null
real 7m13.774s
user 0m5.540s
sys 0m42.456s
zpomaleno asi 40x ;)
-
no tak mozna ne, kdyz se pouzije xargs -I {} (v tomto pripade zbytecne), tak je to stejne pomale
-
ale proc by jako pro lolka mel byt xargs pomalejsi?
Já jsem nepsal nic o tom, že je xargs pomalejší.
-
no to bylo pro davida ("david: ...")
"pro lolka" je misto "proboha" :) tobe vycitam jenom ze nevidis mezeru no
pro uplnost:
time find / -xdev -type f -iname '*' -print0 | xargs -0 -I {} ls -l {} >/dev/null
real 6m50.614s
user 0m5.284s
sys 0m33.760s
-
No já vycházím z toho že v případě find + exec se použije binárka find která volá ln. V případě varianty s xargs se volá find ten předává přes rouru data xargs, který volá ln. Řekl bych že to musí prodloužit čas = protože je tam ta jedna binárka navíc. Ale třeba vyjímka potvrzuje pravidlo? :)
-
No já vycházím z toho že v případě find + exec se použije binárka find která volá ln. V případě varianty s xargs se volá find ten předává přes rouru data xargs, který volá ln. Řekl bych že to musí prodloužit čas = protože je tam ta jedna binárka navíc. Ale třeba vyjímka potvrzuje pravidlo? :)
No, ale v tomto případě to vypadá že je to s xargs opravdu rychlejší :) Taky mi to tak vychází..
-
ten find do roury natlaci seznam souboru a o vic se nestara, z druhe strany si to vezme xargs a umi to treba delat paralelne (parametr -P) nebo omezovat max velikost prikazove radky, aby to nepreteklo (rozesknutim na dva prikazy, parametr -n)
ten xargs se teda nepusti vetsinou vickrat (pokud neni souboru vic nez 4096 nebo nemas -n)
takze bez {} find | xargs ls se ls vola jen jednou se vsema tema souborama na konci, proto je to tak rychle
s {} se bohuzel vola ls pro kazdy soubor zvlast, i tak je to rychlejsi, nez exec, kde se take vola pro kazdy soubor zvlast
s tim paralelnim xargs, kdy vola ls pro kazdy soubor, ale 4 paralelne je to taky celkem rychle
time find / -xdev -type f -iname '*' -print0 | xargs -0 -P4 -I {} ls -l {} >/dev/null
real 1m46.583s
user 0m3.604s
sys 0m21.364s
-
No, ale v tomto případě to vypadá že je to s xargs opravdu rychlejší :) Taky mi to tak vychází..
xargs je skoro v kazdem pripade rychlejsi :) jinak by se s tim nemelo cenu otravovat