GNU 并行:对文件夹中的所有文件并行执行一个命令

Phy*_*cus 5 linux bash gnu-parallel

我正在尝试使用不同的参数并行化粒子模拟以节省一些时间。因此,我想GNUparallel用于为不同的参数运行 bash 脚本。该脚本读取一个文件,然后执行模拟,例如:

$bash script <<< input file

然而:-

$cd ~/parameter_files ls | parallel bash script <<< {}

根本不起作用。我是 Linux 和 GNUparallel 的新手,所以希望有人可以提供帮助。

eto*_*ght 5

你几乎是对的,在命令周围使用双引号

ls | parallel "bash script <<< {}"
Run Code Online (Sandbox Code Playgroud)

否则,此处的字符串<<<会将输入输入到parallel命令中,而不是每个单独的bash script命令中


然而,我发现这个用例非常不寻常,因为这意味着基本上您的脚本正在读取文件名字符串。如果您只想将文件作为参数传递给脚本,您可以使用

ls | parallel bash script
Run Code Online (Sandbox Code Playgroud)

或者如果您想使用标准输入传递文件的内容

ls | parallel "bash script < {}"
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 0

您可以在目录parallel的每个文件上这样使用~/parameter_files

find ~/parameter_files -maxdepth 1 -type f -print0 | parallel -0 bash ../script
Run Code Online (Sandbox Code Playgroud)
  • find命令查找目录中的所有文件~/parameter_files并返回 NUL 终止的文件
  • parallel -0 bash ...将每个文件名提供给您的 shell 脚本并执行它。