在第38页的书Linux的101名黑客的建议:
cat url-list.txt | xargs wget –c
我通常做的:
for i in `cat url-list.txt`
do
wget -c $i
done
有一些事情,莫过于长度,其中xargs的,技术是优于老好for循环 - 技术在bash其他?
添加
在C源代码似乎只有一个岔路口。 相比之下, 多少叉有与bash组合? 请详细说明这个问题。
在第38页的书Linux的101名黑客的建议:
cat url-list.txt | xargs wget –c
我通常做的:
for i in `cat url-list.txt`
do
wget -c $i
done
有一些事情,莫过于长度,其中xargs的,技术是优于老好for循环 - 技术在bash其他?
添加
在C源代码似乎只有一个岔路口。 相比之下, 多少叉有与bash组合? 请详细说明这个问题。
从的理论依据部分在UNIX联机帮助页xargs
。 (有趣的是这一部分中不会出现的OS X BSD版本xargs
,也没有在GNU版本)。
该xargs的实用程序的典型应用是与find工具相结合,以减少通过一个简单的使用的find -exec组合的推出进程数。 该xargs的工具也用于强制启动一个进程需要对存储器的上限。 有了这个基础上考虑,本卷POSIX.1-2008只选择所需的最小功能。
在您的随访中,你问另一个版本将会有多少叉有。 吉姆已经回答了这个 :每次迭代之一。 多少次迭代有哪些? 这是不可能给出一个确切的数字,但容易回答一般问题。 在您的网址,LIST.TXT文件多少行呢?
还有其他的一些其他方面的考虑。 xargs
需要用空格或其他没有没有字符的文件名额外的照顾,和-exec
有一个选项( +
),该集团加工成批次。 所以,不是每个人都喜欢xargs
,也许它不是最好的所有情况。
请参阅以下链接:
也可以考虑:
xargs -I'{}' wget -c '{}' < url-list.txt
但是wget的提供相同甚至更好的方法:
wget -c -i url-list.txt
关于xargs的与循环的考虑,我宁愿当xargs的含义和实施都比较“简单”和“清除”,否则,我使用的循环。
xargs的也将让您有一个巨大的名单,因为外壳采用长度有限的命令行,这是不可能的“的”的版本。
xargs
被设计成处理每个进程它叉的多个输入。 用甲壳脚本for
循环在其输入必须叉对于每个输入的新方法。 避免了每个进程的开销,可以给一个xargs
解决方案显著的性能增强。
代替的GNU /并行I喜欢使用内置的并行处理xargs的。 添加-P,表示有多少叉并行执行。 作为...
seq 1 10 | xargs -n 1 -P 3 echo
将使用对计算3个不同的内核3个叉。 这是由现代GNU xargs的支持。 你将不得不使用,如果BSD或Solaris,以验证自己。
根据您的互联网连接,你可能需要使用GNU并行http://www.gnu.org/software/parallel/并行运行它。
cat url-list.txt | parallel wget -c
一个优点,我能想到的是,如果你有很多的文件,也可能是稍快,因为你没有启动新的流程尽可能多的开销。
我不是一个真正的bash的专家了,所以有可能是其他原因,它的更好(或更糟)。