问题
我使用的是Centos系统,我查找一个指定名字的目录,使用下面的命令:
find / -path *site-package*
但是实际上没有达到目的,有两个问题,一个是有时候能找到,有时候找不到;另外一个问题是找到的不仅仅是目录,还有文件。
解决方案
搜索内容用引号括起来
通过查阅相关资料,找到问题所在。首先,搜索内容最好用单引号或者双引号括起来。因为bash会自动把*号展开,例如,*.txt,如果有1.txt、2.txt两个符合条件的,会自动展开为1.txt 2.txt这样的字符串,就相当于原有命令展开为1.txt 2.txt这样的参数,就会出现稀奇古怪的问题。
例如,你如果使用echo *.txt命令,就会显示1.txt、2.txt字符串,如果使用echo '*.txt',则会显示'*.txt'原始字符串。
Path参数的含义
path参数并不是查找目录的意思,在讲述它的意思之前,我们先简单学习一下find命令的用法。我们参考一下这篇文章《Linux find运行机制详解》,我觉得写得很不错。
find命令的格式如下:find [path...] [expression_list]
其中find后面紧跟的是要搜索的路径列表,可以有多个,比如 \abc .\xxx等。
后面的表达式就是各种过滤条件了,比较常用的有:
'-name':表示对文件名过滤,但是这个文件名是bassname,不含全路径名,比如\a\b.txt文件,这里的文件名是b.txt。
'-path':表示对文件全名过滤,包括路径,比如\a\b.txt,就是对'\a\b.txt'这个字符串过滤。所以就可以解释为什么搜索到的结果包括了文件名了。
'-type d/f/l':那么如果我想只获取目录,怎么办呢?这时就可以使用-type参数了,d表示目录,f表示文件,l表示链接文件。
我习惯用的是