类似 Find 的实用程序用于遍历目录树

类似 Find 的实用程序用于遍历目录树

如果我想在目录中或目录中的某个位置查找文件,find这是一个非常有用的实用程序。是否有类似的实用程序可以查找当前目录中或目录中的内容?

例如,如果我的文件系统如下所示:

/项目/
   foo/
     pom.xml
     酒吧/
       pom.xml
       巴兹/
         pom.xml
   问答/
     pom.xml

然后find /proj/foo/bar -name pom.xml会给我

/proj/foo/bar/pom.xml
/proj/foo/bar/baz/pom.xml

作为输出。我正在寻找一个命令,它会返回

/proj/foo/bar/pom.xml
/proj/foo/pom.xml

(或相反顺序)。我目前倾向于编写一个 shell 脚本,执行类似以下操作:

while [[ $dir != / ]]
do
  check stuff
  cd ..
done

有这样的事情存在吗?

理想情况下,我希望可以在任何 shell 中在 Linux、Mac 和 Cygwin 上运行的东西,但可以在子集或仅在上运行的东西bash也是有用的。

答案1

未经测试,但是这应该可以做到bash(不确定其他 shell 是否可行):

#!/bin/bash
oldpwd=`pwd`
ret=1

while true; do
    find `pwd` -mindepth 1 -maxdepth 1 $@

    if [ $? -eq 0 ] ; then
        ret=0
    fi

    if [ `pwd` = '/' ] ; then
        exit $ret
    else
        cd ..
    fi
done

cd $oldpwd

作为脚本,它应该接受find表达式的常规语法。它保存当前目录,以便稍后跳回,然后循环目录树,仅在该级别的项目中搜索表达式,直到到达根目录。这将打印树上所有匹配的项目,如果find您只想要第一个匹配项,您可以在循环内轻松添加检查以阻止成功。

它可能需要稍微优化一下,但我追求的是快速且易于理解,而不是速度。

相关内容