Nechte xargs provést výpočet za vás.
printf '%s\0' files/* | xargs -0 mv -t new_files_dir
Zdá se, že vaše otázka předpokládá, že existuje skutečný „limit počtu argumentů“, zatímco ve skutečnosti jde o kombinaci dvou limitů:
-
součet délek řetězců argumentů příkazového řádku a proměnné prostředí včetně jejich ukončujících bajtů NUL.
-
maximální délka řetězce jednoho argumentu příkazového řádku.
Například můžete být schopni zavolat příkaz s 200 000 jednopísmennými argumenty, s 100 000 dvoupísmennými argumenty, ale ne s jedním argumentem větším než 128 kB.
Za předpokladu xargs
od GNU coreutils, xargs --show-limits </dev/null
zobrazí, jaké jsou tyto limity ve vašem systému.
Na libovolném systému xargs
nebude při vytváření příkazových řádků používejte maximální limity svého systému, ale vybere si něco rozumného (nedávalo by žádný smysl systém tímto způsobem zatěžovat).
Pokud na tom opravdu záleží, můžete napsat svůj vlastní batch-move
program v C, který zabere např. seznam souborů jako standardní vstup a přesouvání provádí pomocí příslušných systémových volání Unix.
Pokud ne, „zjistit limity a dopracovat se k tomu“ je přesně co xargs(1)
(verze GNU pro Linux, zde) ano. Velmi pochybuji, že budete mnohem rychlejší.