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