unix - 将输入与输出连接到 svn list 命令,然后将其传递给 grep

标签 unix svn grep xargs

我目前有以下 shell 命令,它只是部分工作:

svn list $myrepo/libs/ | 
xargs -P 10 -L 1 -I {} echo $myrepo/libs/ {} trunk |
sed 's/ //g' |
xargs -P 20 -L 1 svn list --depth infinity |
grep .xlsx

其中$myrepo对应svn服务器地址。

libs 文件夹包含多个子文件夹(目前大约有 30 个,但最终会达到 100 个),每个子文件夹包含多个标签、分支和主干。我希望获得仅包含在每个子文件夹的主干文件夹中的 xlsx 文件列表。上面的命令工作正常,但它只返回 $myrepo/libs/subfolder/trunk/的相对路径,所以我得到了这个:

1/2/3/文件.xlsx

由于可能需要搜索大量文件,我使用 xargs -P 分两个并行步骤执行(我没有也不能使用并行)。它还试图在一个命令中执行此操作,以便它可以在 php/perl/etc 中使用。并避免多次系统调用。

我想做的是将输入连接到命令的这一部分:

xargs -P 20 -L 1 svn list --depth infinity

使用它的输出,给出以下内容:

$myrepo/libs/subfolder/trunk/1/2/3/file.xlsx

然后将其传递给 grep 以查找 xlsx 文件。

我很感激能提供的任何帮助。

最佳答案

如果我设法正确地推测出你的意图,那么这样的事情可能对你有用。

svn list "$myrepo/libs/" |
xargs -P 20 -n 1 sh -c 'svn list -R "$0/trunk/$1" |
    sed -n "s%.*\.xlsx$%$0/trunk/$1/&%p"' "$myrepo"

简而言之,我们对内部 svn list 的输出进行后处理,以过滤到仅 .xslx 文件,同时将完整的 SVN 路径添加回去。这样,处理发生在 repo 路径仍然已知的地方。

我们通过将 "$myrepo" 作为 "$0" 传递给从属的 sh 来稍微修改一下,所以我们没有export 这个变量。来自外部 svn list 的输入为 $1

(我可以访问的存储库布局略有不同,因此某处可能存在复制/粘贴错误。)

关于unix - 将输入与输出连接到 svn list 命令,然后将其传递给 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26628605/

相关文章:

svn - 如何正确配置TortoiseSVN 'Global ignore pattern'?

linux - 如何在 gnu 中并行运行多个组合命令(带有多个参数)?

linux - 以父脚本的用户身份运行 shell 下标

linux - 无法使用wget登录网站

linux - 使用grep进行文件搜索,不包括结果中的字段

hadoop - 如何解释Hadoop Grep命令输出

awk - 如何仅显示匹配行之后的下一行?

java - 无法在服务器上使用java程序执行简单的 "whoami"unix命令

git - SVN-GIT 获取时无法连接到存储库

ios - 如何在 Xcode 中设置 SVN 存储库的用户名和密码?