gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:29:03 24 4
gpt4 key购买 nike

我目前有以下 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com