GNU/Linux >> Znalost Linux >  >> Linux

Jak vypočítat počet souborů, které lze předat jako argumenty nějakému příkazu pro dávkové zpracování?

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ů:

  1. 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.

  2. 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ší.


Linux
  1. Jak spustit příkaz jako správce systému (root)?

  2. Jak používat Linuxový příkaz find k hledání souborů

  3. Jak mohu použít řádky souboru jako argumenty příkazu?

  1. Jak mohu předat všechny argumenty s xargs uprostřed příkazu v linuxu

  2. Jak mohu spustit jiný příkaz, ale se stejnými argumenty?

  3. Jak mohu otevřít soubor s čísly řádků zobrazenými z příkazového řádku v 'vi'?

  1. Shell - Jak najít adresář nějakého příkazu?

  2. Jak mohu přesouvat soubory pomocí xargs v Linuxu?

  3. Jak mohu otestovat paměť RAM na poškození dat v systému založeném na ARM?