我执行以下命令:-find / -type f -name fs -type -exec svnlook tree {} \; | egrep“/ $”
结果是svnlook:无法打开文件'/ var / lib / svn / repos / b1me / products / payone / generic / code / core / db / fs -type / format':不是目录svnlook:无法打开文件'/ var / lib / svn / repos / b1me / products / payone / generic / code / fees / db / fs-type / format':不是目录
也许我们必须让“查找”命令给我们没有“db / fs-type / format”的path换句话说我们必须剪切“查找命令”的输出….但我怎么能做到这一点?
这里不是find命令。 find命令正在执行正在执行的操作,例如在整个文件系统中查找所有名为fs-type
的regulare文件。
然后,您将find命令的结果传递给svnlook tree
。
svnlook tree
命令期望一个目录,因为它的参数不是像你给的那样的常规文件。 你传递给svnlook tree
的目录应该有一个名为format
的文件,它包含版本库的版本号,这就是为什么你会得到上面的错误信息。
这是svnlook
命令给你看到的错误信息。 你需要做的是找出path/var/lib/svn/repos/
中的哪个目录是传递给svnlook
的正确目录。
你也可以通过阅读关于svn的一些信息来帮助你自己,以便更好地理解你正在使用的系统。
编辑
没有简单的方法来find所有的svn存储库
您可以search系统上的所有.svn目录,然后在其上运行svn info
,然后检查“ Repository Root:
”的输出。 如果在一个公共仓库中有很多项目,那么这个输出将需要通过uniq
sudo find / -name .svn -exec dirname {} \; | \ xargs svn info | grep "Repository Root:" | uniq \ sed 's/Repository Root: file:\/\///'
你会得到像/var/svn/repos
这样的输出。
以上列出了散布在文件系统中的项目的所有存储库。 那么你可以
svnlook tree /var/svn/repos |grep /
从上面的命令输出中find每个存储库所需的内容。
上面的方法唯一的问题是,如果一个目录树已被删除,它包含一个项目下svn控制和项目是在一个独特的存储库,那么你不会find它。
你可以使用“-path”参数与你喜欢的模式
我的理解是,你想跳过结果中的目录。
你可以用-path <path_to_skip> -prune
参数来做到这一点