Lascia che xargs esegua i calcoli per te.
printf '%s\0' files/* | xargs -0 mv -t new_files_dir
La tua domanda sembra presupporre che esista un effettivo "limite del numero di argomenti", mentre in realtà è una combinazione di due limiti:
-
la somma delle lunghezze delle stringhe degli argomenti della riga di comando e variabili d'ambiente inclusi i loro byte NUL di terminazione.
-
la lunghezza massima della stringa di un singolo argomento della riga di comando.
Ad esempio, potresti essere in grado di chiamare un comando con 200000 argomenti di una sola lettera, con 100000 argomenti di due lettere, ma non con un singolo argomento di più di 128k byte.
Assumendo il xargs
da GNU coreutils, xargs --show-limits </dev/null
mostrerà quali sono questi limiti sul tuo sistema.
Su qualsiasi sistema, xargs
non usa i limiti massimi del tuo sistema quando costruisci le righe di comando, ma sceglierai qualcosa di ragionevole (non avrebbe alcun senso mettere a dura prova il sistema in quel modo).
Se è davvero importante, potresti scrivere il tuo batch-move
programma in C, che richiede ad es. l'elenco dei file come input standard ed esegue lo spostamento utilizzando le relative chiamate di sistema Unix.
In caso contrario, esattamente è "trova i limiti e lavora fino a quello". cosa xargs(1)
(la versione GNU su Linux, qui) lo fa. Dubito fortemente che diventerai molto più veloce.