如果我想在目录中或目录中的某个位置查找文件,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
您只想要第一个匹配项,您可以在循环内轻松添加检查以阻止成功。
它可能需要稍微优化一下,但我追求的是快速且易于理解,而不是速度。