将 xargs 与来自文件的输入结合使用

将 xargs 与来自文件的输入结合使用

假设我有一个包含以下内容的文件

bob
john
sue

现在这些直接对应于(在本例中)URL 模式,例如http://example.com/persons/bob.tar, john.tar, sue.tar

我想把这些线条贯穿起来xargs。我不知道传递给正在执行的命令的是什么。如何从提示符(假设我想简单地回显每一行,如cat file | xargs echo $PARAM)或从 bash 脚本访问参数。

答案1

迈克尔的回答是对的,应该可以解决你的问题。跑步

cat file | xargs -I % curl http://example.com/persons/%.tar

bob.tar john.tar. sue.tar将按预期下载文件。

:猫在这里没用

而是使用:

<file xargs -I % curl http://example.com/persons/%.tar

答案2

我认为您是在问如何将从xargs' stdin 中提取的各个行插入到命令中间,而不是始终将其粘贴在末尾。如果是,则该-I标志带有一个replacement-string参数;然后将在命令中xargs替换为从标准输入读取的行:replacement-string

$ cat file | xargs -I foobar curl http://example.com/foobar.tar

答案3

$ 人参数
...
       --arg-文件=文件
       -一份文件
              从文件而不是标准输入中读取项目。如果你使用这个
              选项,运行命令时 stdin 保持不变。其他-
              明智的是,stdin 是从 /dev/null 重定向的。
...

您可能还想将--delimiter=/设置-d'\n'


另一方面,如果您只是尝试将文件中的每一行转换为 URL,

$sed-e 's#.*#http://example.com/persons/&.tar#' 文件

就可以了,如果你想获取所有这些,只需将其通过管道传输到.| wget -i

答案4

使用 GNU Parallel,您可以执行以下操作:

cat urls | parallel curl {} ">" {/}

或者:

cat persons | parallel curl http://example.com/persons/{}.tar ">" {}.tar

观看 GNU Parallel 的介绍视频以了解更多信息: http://www.youtube.com/watch?v=OpaiGYxkSuQ

相关内容