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
Citace od: trubicoid2 kdy 11. 06. 2017, 00:04:26
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
Citace od: trubicoid2 kdy 12. 06. 2017, 16:44:03
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ší :)
Citace od: David1234 kdy 13. 06. 2017, 12:44:03
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
Citace od: Lol Phirae kdy 13. 06. 2017, 13:01:47
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
Citace od: trubicoid2 kdy 13. 06. 2017, 14:10:45
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? :)
Citace od: David1234 kdy 13. 06. 2017, 15:12:47
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
Citace od: David1234 kdy 13. 06. 2017, 15:32:15
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