我如何剪辑“查找”命令的结果?

我如何剪辑“查找”命令的结果?

替代文本我执行以下命令:-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’: 不是目录

也许我们必须让“find”命令给我们提供没有“db/fs-type/format”的路径,换句话说,我们必须剪辑“find command”的输出......但我该怎么做呢???

答案1

这不是 find 命令的问题。find 命令会准确执行您指示它执行的操作,例如,它会fs-type在整个文件系统中查找命名的常规文件的所有出现位置。

然后,您将 find 命令的结果传递给svnlook tree

svnlook tree命令需要将目录作为参数,而不是您提供的常规文件。您传递到的目录svnlook tree应该有一个名为的文件format,其中包含存储库的修订号,这就是您收到上述错误消息的原因。

正是该svnlook命令向您提供了您看到的错误消息。您需要做的是找出路径中的哪个目录/var/lib/svn/repos/是要传递的正确目录svnlook

您还可以通过阅读以下信息来帮助自己SVN 版本以便更好地理解您正在使用的系统。

编辑

没有简单的方法可以找到所有 svn 存储库

您可以搜索系统上的所有 .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 /找到上面命令输出中列出的每个存储库所需的内容。

上述方法的唯一问题是,如果目录树已被删除,并且它包含一个受 svn 控制的项目,并且该项目位于唯一的存储库中,那么您将找不到它。

答案2

您可以将“-path”参数与您喜欢的模式一起使用

答案3

我的理解是您想跳过结果中的目录。

-path <path_to_skip> -prune您可以使用参数来实现

相关内容