如何编写Subversionvalidation脚本?
从这个问题开始 ,我正在尝试编写一个bash脚本,它将从包含我的subversion存储库的目录中递归两个目录,检查目录是否是存储库。 将存在目录和存储库的混合,以及隐藏在这些子目录中的一些存储库。
发现的任何Subversion repos应将其名称打印到输出文件,然后输出svnadmin verify
。
我有以下代码片段来检查目录是否是存储库:
svnlook info /path/to/repo >/dev/null
所以我扔掉了svnlook
输出,返回代码为0表示它确实是一个SVN repo。 我可以使用这个片段,在if
语句中运行svnadmin verify
是否返回0。
我试过了:
find /dir/containing/repos -maxdepth 2 -type d -exec bash -c 'if [ "svnlook info {} >/dev/null" = 0 ] ;then ;echo "{}" >>output.txt ;svnadmin verify "{}" >>output.txt ;fi' \;
虽然我发现每个目录都有以下警告:
bash: -c: -line 0: syntax error near unexpected token ';'
我想我正试图不必要地将它全部塞进一个find
命令中,无论如何我都错了。 构建此任务的最佳方法是什么?
你不需要;
then
在then ;echo "{}" >>output.txt
。
使用 :
then echo "{}" >>output.txt
还要注意,而不是使用{}
使用shell的位置参数(我不熟悉svn
所以依赖于你的命令):
find /dir/containing/repos -maxdepth 2 -type d -exec bash -c 'if svnlook info /path/to/repo >/dev/null ;then echo "$1" >>output.txt ;svnadmin verify "$1" >>output.txt ;fi' _ {} \;
-
if svnlook info /path/to/repo >/dev/null
将运行该命令并将STDOUT重定向到/dev/null
-
如果
svnlook info /path/to/repo
命令成功(退出代码0),则echo "$1" >>output.txt ;svnadmin verify "$1" >>output.txt
命令将运行 -
这里我们使用目录名
{}
作为由shell处理的第一个参数($1
)。 -
_
这里只是一个占位符,表示位置参数0,因为bash -c command
在从0开始的command
后开始考虑任何进一步的参数。由于_
是第零个参数,我们可以使用{}
作为第一个参数。 检查man bash
以获得更多想法。