为什么**找不到**?

时间:2008-08-20 21:03:55

标签: bash unix shell ksh

我正在寻找在我的系统上安装的shell脚本文件,但查找不起作用:

$ find /usr -name *.sh

但我知道那里有很多脚本。例如:

$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh  
/usr/local/lib/tkConfig.sh

为什么找不到工作?

3 个答案:

答案 0 :(得分:52)

尝试引用通配符:

$ find /usr -name \*.sh

或:

$ find /usr -name '*.sh'

如果您的文件恰好与当前工作目录中的 * .sh 相匹配,则会在查看之前展开通配符。如果您的工作目录中碰巧有一个名为tkConfig.sh的文件,查找命令将扩展为:

$ find /usr -name tkConfig.sh

只能找到名为tkConfig.sh的文件。如果您有多个与 *。sh 匹配的文件,则会从查找中收到语法错误:

$ cd /usr/local/lib
$ find /usr -name *.sh
find: bad option tkConfig.sh
find: path-list predicate-list

同样,原因是通配符扩展到两个文件:

$ find /usr -name tclConfig.sh tkConfig.sh

引用通配符可防止它过早扩展。

另一种可能性是/ usr或其子目录之一是符号链接。 查找通常不会关注链接,因此您可能需要 -follow 选项:

$ find /usr -follow -name '*.sh'

答案 1 :(得分:15)

在某些系统(例如Solaris)上,没有默认操作,因此您需要添加-print命令。

find /usr -name '*.foo' -print

答案 2 :(得分:7)

要查找磁盘上的文件,请使用“locate”来代替即时 (查看每日构建的索引) 你的例子是:

locate '/usr*.sh'
相关问题