xargs に計算を任せてください。
printf '%s\0' files/* | xargs -0 mv -t new_files_dir
あなたの質問は、実際には「引数の数の制限」があると想定しているようですが、実際には2つの制限の組み合わせです:
<オール>コマンドライン引数の文字列の長さの合計 and 終了 NUL バイトを含む環境変数
単一のコマンドライン引数の文字列の最大長。
たとえば、1 文字の引数が 200000 個、2 文字の引数が 100000 個のコマンドを呼び出すことはできますが、128k バイトを超える単一の引数では呼び出すことができません。
xargs
と仮定すると GNU coreutils から、xargs --show-limits </dev/null
システム上のこれらの制限が表示されます。
どのシステムでも xargs
しません コマンド ラインを作成するときにシステムの最大制限を使用しますが、合理的なものを選択します (そのようにシステムに負担をかけることはまったく意味がありません)。
それが本当に重要な場合は、独自の batch-move
を書くことができます Cのプログラム。標準入力としてファイル リストを取得し、関連する Unix システム コールを使用して移動を行います。
そうでない場合、「限界を見つけてそれまでに作業する」は正確です。 何 xargs(1)
(Linux の GNU バージョン、こちら) はそうです。あなたがもっと速くなるなんて、私にはとても思えません.