这是对this问题的跟进。
我的系统是运行Ubuntu Desktop的专用服务器,版本12.04(精确)64位,3.14.32-xxxx-std-ipv6-64。发布或内核都不能升级,但我可以安装任何软件包。
上述问题中描述的问题似乎已经解决,但这对我不起作用。我已经安装了最新的lftp和并行软件包,它们似乎能够自行运行。
lftp
。./job.sh ftp.microsoft.com
,但我需要chmod -x
脚本sed 's/|.*$//' end_unique.txt | xargs parallel -j20 ./job.sh :::
不起作用,并以/bin/bash: <server>: command not found.
为简化起见,我清理了输入文件end_unique.txt
,现在每行都有以下格式:
<server>
每行以CRLF结尾,因为它是从Windows服务器导入的。
修改1:
这是job.sh脚本:
#/bin/sh
server="$1"
lftp -e "find .; exit" "$server" >"$server-files.txt"
编辑2:
我拿了文件并对着fromdos运行它。现在它应该是标准的unix格式,每行一个服务器。请记住,文件中的服务器格式可能不同:
ftp.server.com
www.server.com
server.com
123.456.789.190
等。所有这些服务器都是ftp服务器,可由ftp://<serverfromfile>/
访问。
答案 0 :(得分:2)
对于:::
,parallel
需要完成命令行所需的参数列表,以便在命令行中显示,如
parallel -j20 ./job.sh ::: server1 server2 server3
没有:::
它会从stdin中读取参数,在这种情况下,它会更好地为我们服务。你可以简单地说
parallel -j20 ./job.sh < end_unique.txt
确定两件事:
parallel
而不是其他版本(例如来自moreutils
的版本),因为只有(据我所知)GNU版本支持读取参数从stdin列出,GNU并行未配置为禁用GNU扩展。在评论中经过长时间的讨论之后,事实证明它们在Ubuntu 12.04上默认是禁用的,所以在其他地方(尤其是Ubuntu的下游)可能会发现这种情况并不是不可思议的。这样的配置可以隐藏在
中$PARALLEL
,/etc/parallel/config
或~/.parallel/config
如果您无法使用parallel
的GNU版本,并且如果您的参数列表对于shell而言不太长并且其中的任何参数都不包含空格,相同moreutils parallel
的内容是
parallel -j20 job.sh -- $(cat end_unique.txt)
这对OP不起作用,因为该文件包含的服务器数量超过了shell愿意放入命令行的数量,但它可能适用于有类似问题的其他服务器。