【问题标题】:Reverse directory search on linux command linelinux命令行上的反向目录搜索
【发布时间】:2015-01-30 17:43:34
【问题描述】:

我有一个自定义的 linux 提示符,它显示各种有用的信息块。当我在日常工作中使用 SVN 时,我认为使用有关当前工作区 URL 的信息进一步自定义提示会很好。这主要是由最近的一个案例引起的,我切换到一个分支然后忘记了我已经这样做了。混乱比比皆是,为了避免这种情况再次发生,我认为这似乎是个好主意。

其他人已经做到了这一点,所以我可以按照他们的例子进行,但我也喜欢从基本原则出发。关于其他人的解决方案,我观察到的一件事是他们倾向于执行“svn info”而不考虑上下文。本身不是问题,但我认为在调用“svn info”之前测试普遍存在的“.svn”目录可能会很好。

我得出了这个部分解决方案:

if [ -d './.svn' ] ; then svn info | sed -n -e '/^URL/ s/.*svn//p' ; fi;

在存在“.svn”目录的情况下,我调用“svn info”,然后使用 sed 吐出我感兴趣的 URL 部分。

然而问题在于,自从 svn 1.7 以来,'.svn' 并不普遍!

我曾想过我可能会用调用“find”来替换目录测试,以执行反向目录搜索以搜索目录树......但似乎没有这样的能力。

除了完全放弃对“.svn”的测试之外,谁能建议我如何测试当前位置和所有父文件夹中是否存在所述文件夹?

非常感谢。

【问题讨论】:

    标签: linux shell svn command-line find


    【解决方案1】:

    首先。不要将工作副本用于多个分支/主干。根本没有理由。签出特定项目的特定分支通常需要不到五分钟的时间。而且,在这个千兆字节和太字节大小的硬盘驱动器时代,没有理由节省空间。 (我的第一个硬盘是 40megabytes。而且,我曾经统治过我的同事,他们只有 10 和 20mega 字节硬盘)。

    当你第一次不小心使用了错误的分支时,你节省的时间和磁盘空间将会丢失,因为你忘记了你已经切换了。

    检查您是否在 Subversion 工作副本中的最佳方法是运行 svn info 并查看退出值是什么。如果它不为零,则您不在 Subversion 工作目录中。

    如果你真的想在你的提示中包含 repo root(或类似的东西),我建议在你的提示命令中使用这样的序列:

    PS1="\u@\h:\w (\$(svn info --xml 2> /dev/null | sed -n '/<relative-url>/s/<.*>\(.*\)<.*>/\1/p'))\n$ "
    

    【讨论】:

      【解决方案2】:

      这个函数会从你当前的目录向上遍历树,寻找一个“.svn”目录:

      is_svn () { 
          local dir=$PWD 
          while [[ $dir != "/" ]]; do  
              [[ -d "$dir/.svn" ]] && return 0
              dir=$(dirname "$dir")
          done
          return 1
      }
      

      然后,您的提示可以包含类似

      $( is_svn && svn info | ... )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-13
        • 2010-10-20
        • 2018-01-04
        • 2017-11-16
        • 2022-12-10
        • 2023-03-24
        • 2010-10-26
        • 2016-11-01
        相关资源
        最近更新 更多