标签: gnu-parallel

并行命令字符串内的替换

我想下载多个文件并将它们保存到其名称的md5和中:

cat list | parallel -j4 "md5=$(wget -O - {} | tee tmpfile_{#} | md5sum | cut -d ' ' -f 1); mv tmpfile_{#} $md5"
Run Code Online (Sandbox Code Playgroud)

但问题是 bash 似乎在执行并行替换之前执行 wget 的东西{}...所以 wget 想要从http://{}

那么parallel如何在子命令执行之前替换它的变量呢?

wget quoting variable gnu-parallel

2
推荐指数
1
解决办法
1400
查看次数

使用“并行”在远程主机上执行命令 - 没有返回任何内容,登录失败

我正在尝试执行简单的“并行”命令

parallel -S server1,server2,server3 echo "Number {}: Running on \`hostname\`" ::: 1 2 3
Run Code Online (Sandbox Code Playgroud)

它要求我提供三台服务器的密码,但什么也没发生。通常 ssh 连接到这些服务器工作正常。

当我登录到其中一台服务器时,系统警告我登录“notty”失败。

如何才能实现正确的执行呢?

password ssh remote gnu-parallel

2
推荐指数
1
解决办法
964
查看次数

使用并行从列表中运行具有多个参数的程序

我有一个通过命令行(Ubuntu)运行的 bash 程序,如下所示:

./extract_field.sh ABC001
Run Code Online (Sandbox Code Playgroud)

ABC001我想从给定的 shapefile 中提取的字段 ID在哪里。

要使用多个 ID 运行此脚本,我首先在list.txt文件中每行保存一个 ID :

ABC001
ABC014
ABC213
ABC427
Run Code Online (Sandbox Code Playgroud)

然后使用parallel以下方法调用脚本:

parallel -a list.txt ./extract_field.sh
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。

但是,我计划进行更改,extract_field.sh因此需要两个参数而不是一个参数。如果我只是将文本文件更改为每行容纳两个参数,上述工作流程是否仍然有效?

ABC001 arg2a
ABC014 arg2b
ABC213 arg2c
ABC427 arg2d
Run Code Online (Sandbox Code Playgroud)

通过这种变化,我希望parallel -a list.txt ./extract_field.sh表现得像

./extract_field.sh ABC001 arg2a
./extract_field.sh ABC014 arg2b
Run Code Online (Sandbox Code Playgroud)

等等。

那正确吗?

我可以在询问之前先对其进行测试,但我决定先询问,因为脚本中的此更改可能需要我几个小时才能完成(尽管这听起来像是一个简单的更改)。

command-line bash shell-script gnu-parallel

2
推荐指数
1
解决办法
37
查看次数

为什么 GNU Parallel 会变慢?

我正在学习 GNU 并行并尝试了以下操作:

$ for i in {1.txt,2.txt}; do time wc -l $i; done
100 1.txt

real    0m0.010s
user    0m0.000s
sys     0m0.010s
10000012 2.txt

real    0m0.069s
user    0m0.050s
sys     0m0.018s
Run Code Online (Sandbox Code Playgroud)

然后我用 重新运行上述命令parallel,但它减慢了速度。为什么?

$ for i in {1.txt,2.txt}; do time parallel --nonall wc -l $i; done
100 1.txt

real    0m0.325s
user    0m0.192s
sys     0m0.042s
10000012 2.txt

real    0m0.305s
user    0m0.220s
sys     0m0.043s
Run Code Online (Sandbox Code Playgroud)

gnu-parallel

1
推荐指数
1
解决办法
951
查看次数

GNU 并行正确使用与 tar、xz、gpg 结合使用

我想加快我的归档操作,我通常会进行 23 GiB(一张蓝光)备份。

我发现了这个:How to do Large fileparallel Encryption using GnuPG and GNU parallel?


因为我根本不理解这段代码(从未使用过parallel):

tar --create --format=posix --preserve-permissions --same-owner --directory $BASE/$name --to-stdout . |
    parallel --pipe --recend '' --keep-order --block-size 128M "xz -9 --check=sha256 |
    gpg --encrypt --recipient $RECIPIENT;echo bLoCk EnD" |
    pv > $TARGET/$FILENAME
Run Code Online (Sandbox Code Playgroud)

我想问一下有没有人可以帮我解析一下。谢谢。

tar gpg xz gnu-parallel

1
推荐指数
1
解决办法
1078
查看次数

gnu 与 bash 数组并行

我尝试使用 GNU 并行freesurfer preproc运行命令 recon-all我有一个 bash 患者列表数组,可以同时运行 8 个专利:

root@4d8896dfec6c:/tmp# echo ${ids[@]}
G001 G002 G003 G004 G005 G006 G007 G008
Run Code Online (Sandbox Code Playgroud)

并尝试使用命令运行:

echo ${ids[@]} | parallel --jobs 28 recon-all -s {.} -all -qcache
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为我想我需要在 ls 表示中使用 bash 数组,例如:

ls ${ids[@]} | parallel --jobs 28 recon-all -s {.} -all -qcache
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

bash gnu-parallel bash-array

1
推荐指数
1
解决办法
2661
查看次数

并行:警告:没有更多文件句柄

我正在运行 GNU 并行,一段时间后我得到:

parallel: Warning: no more file handles Raising ulimit -n or etc/security/limits.conf may help.
Run Code Online (Sandbox Code Playgroud)

为了克服这个问题,应该向并行命令添加什么参数?

我更改limits.conf为,unlimited但后来我无法使用sudo或登录我的盒子,同样的问题root就像这里ssh

这是我正在使用的代码片段。我有 2 个文件,第一个带有密码,第二个带有主机。

passPasswords_and_hosts() {
        `sudo sshpass -p "$1" ssh -o ConnectTimeout=2 root@"$2" -o StrictHostKeyChecking=no "$command_linux"`
}
export -f testone
export -p command_linux
parallel --tag -k passPasswords_and_hosts :::: "$passwords" "$linux_hosts"
Run Code Online (Sandbox Code Playgroud)

ulimit gnu-parallel

1
推荐指数
1
解决办法
1539
查看次数