为什么"找不到"任何东西?

时间:2020-03-05 18:41:17  来源:igfitidea点击:

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

$ find /usr -name *.sh

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

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

为什么找不到工作?

解决方案

回答

尝试引用通配符:

$ find /usr -name \*.sh

或者:

$ find /usr -name '*.sh'

如果我们在当前工作目录中碰巧有一个与* .sh匹配的文件,通配符将在发现之前被展开。如果工作目录中恰好有一个名为tkConfig.sh的文件,那么find命令将扩展为:

$ find /usr -name tkConfig.sh

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

$ 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或者其子目录之一是符号链接。 find通常不跟随链接,因此我们可能需要-follow选项:

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

回答

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

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

回答

要在磁盘上查找文件,请使用" locate"代替
(查看每日建立的索引)
示例将是:

locate '/usr*.sh'