linux - 在 linux 命令行上反向目录搜索

标签 linux shell svn command-line find

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

其他人已经实现了这一点,所以我可以只效仿他们的例子,但我也喜欢从基本原则出发。关于其他人的解决方案,我观察到的一件事是他们倾向于在不考虑上下文的​​情况下执行“svn 信息”。这本身不是问题,但我认为在调用“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”的测试之外,有人可以建议我如何测试当前位置和所有父文件夹中是否存在所述文件夹吗?

非常感谢。

最佳答案

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

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

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

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

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

关于linux - 在 linux 命令行上反向目录搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28241664/

相关文章:

linux - 将选定的文本发送到节日

linux - 一天中特定时间段之间的调用旋度

shell - Emacs shell 模式在缓冲区中打开文件

git - 将 svn 补丁应用到 git 存储库

svn - svn 中的预提交钩子(Hook) : could not be translated from the native locale to UTF-8

svn - 如何将修改后的文件提交到存储库

linux - 比较字符串时出现问题 (BASH)

python - 如何将文件夹中的所有文件类型更改为特定类型?

linux - 如何使用 shell 脚本在多个 csv 文件的末尾添加列

linux - MySQL将不会开始使用Dockerfile