Portál AbcLinuxu, 5. května 2025 18:45
Řešení dotazu:
find ... | while read f; do ... $f; done
. Pak se to ještě dělá přes find ... -print0 | xargs -něco
a find ... -exec
.
Druhá možnost je ten skript naprogramovat v nějakém jazyce, kde s tímhle problémy nejsou. Například v Pythonu. Ale chápu, že se ti do toho nechce, mně se některé věci taky dělají v shellu líp.
find -print0 | xargs -0
man xargs:
-0 Change xargs to expect NUL (``\0'') characters as separators, instead of spaces and newlines. This is expected to be used in concert with the -print0 function in find(1).Případně podobně pomocí parallel. man parallel
-0 Use NUL as delimiter. Normally input lines will end in \n (newline). If they end in \0 (NUL), then use this option. It is useful for processing arguments that may contain \n (newline).
~> for i in `seq 1 10`; do echo bash -c \"sleep 1\; echo $i\"; done |parallel [čekání 1s] 1 2 3 4 5 6 7 8 [čekání 1s] 9 10 ~> for i in `seq 1 10`; do echo bash -c \"sleep 1\; echo $i\"; done |parallel.moreutils [nic] ~>
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.