2009-11-04 35 views
1

一些像svn log这样的命令只会从命令行输入一个输入,所以我不能说grep 'pattern' | svn log。它只会返回第一个文件的信息,所以我需要独立地对每一个执行svn日志。如何在* nix shell中一次执行一个参数的命令?

我可以使用它的exec选项来执行此操作:find -name '*.jsp' -exec svn log {} \;。但是,grep和find提供了不同的功能,而-exec选项不适用于grep或许多其他工具。

那么是否有一种通用的方式来从unix命令行工具中获取输出,并让它针对每个独立输出执行任意命令(如find)?

+0

grep -l'pattern'我推测。另请参阅findrepo:http://www.pixelbeat.org/scripts/findrepo – pixelbeat 2009-11-04 13:48:17

回答

9

答案是xargs -n 1

echo moo cow boo | xargs -n 1 echo 

输出

 
moo 
cow 
boo 
+0

谢谢!正是我需要的。 – 2009-11-04 14:24:22

0

尝试xargs的:

grep 'pattern' | xargs svn log 
+0

我投票支持。为什么downvote? svn日志确实需要多个参数,而这个答案并不能完全回答这个问题,实际上它可能是使用xargs的更好方法。 – 2009-11-05 03:45:13

0

小一休的shell脚本(使用xargs的是多为一次性的更好,这就是为什么它的存在)

#!/bin/sh 

# Shift past argv[0] 
shift 1 

for file in "[email protected]" 
do 
     svn log $file 
done 

你能说出它的multilog ' 或类似的东西。这样称呼它:

./multilog.sh foo.c abc.php bar.h Makefile

它允许多一点理智通过自动生成脚本被调用时,即说​​话SVN之前测试每个的存在,或重定向每个输出到一个单独的文件,插入它到一个SQLite数据库等

这可能是也可能不是你在找什么。