Paralelní spuštění příkazu pro seznam souborů (bash)

Potřeboval jsem provézt konverzi několika videí na jiný formát, a jelikož pro daná kodek nešlo u ffmpeg použít vícevláknové zpracování, řešil jsem jak pouštět několik příkazu současně (a tím urychlit celkové zpracování seznamu souborů).

Nejjednodušší postup jsem našel s použitím xargs:

ls -1 /cesta/soubory* | xargs -n1 -P3 -ISOUBOR ffmpeg -i SOUBOR ...

  • pomocí ls se vyrobí seznam souborů, který se přehodí na xargs
  • -n1 určuje kolik záznamů si má xargs vzít najednou (1 je defaultní hodnota)
  • -P3 určuje kolik procesů se má pustit (tohle je ten „magický parametr“)
  • -I určuje řetězec, který se pak nahradí konkrétním parametrem ze seznamu