10.1 根据文件名搜索文件
find -name
find
命令的基本用途是根据文件名(或文件名的一部分)查找文件,因此也就有了-name
选项。在默认情况下,find
会自动递归搜索整个目录结构。要在music盘中查找唯一的Shaggs组下的所有MP3文件,如下所示:
$ cd /media/music
$ find . -name Shaggs
./Outsider/Shaggs
什么?这个结果肯定不对。find
命令找到了文件夹,但没有歌曲。为什么呢?因为没有使用任何通配符,所以find
命令搜索的就是名为“Shaggs”的特定文件。只有一项结果可以精确匹配这一名称:包含所要歌曲的文件夹(因为文件夹是一种特殊的文件)。
需要使用通配符,但为了防止shell以我们不期望的方式解释通配符,就必须用引号把搜索内容括起来。下面就用新改进后的方法再搜索一下:
$ find . -name "*Shaggs*"
./Outsider/Shaggs
./Outsider/Shaggs/Gimme_Dat_Ting_(Live).mp3
./Outsider/Shaggs/My_Pal_Foot_Foot.ogg
./Outsider/Shaggs/I_Love.mp3
./Outsider/Shaggs/Things_I_Wonder.ogg
用引号把通配符括起来,就找到文件夹和文件了。
说明 正在使用
find
命令的另一个选项find
在终端界面上列出它的搜索结果。find
命令时包括该选项。
find
命令的另一重要方面是,搜索结果的格式取决于正在搜索的路径。前面使用的是相对路径,所以结果也是按相对路径给出。如果使用绝对路径(以/作为路径的开始),会发生什么呢?
$ find / -name "*Shaggs*"
/music/Outsider/Shaggs
/music/Outsider/Shaggs/Gimme_Dat_Ting_(Live).mp3
/music/Outsider/Shaggs/My_Pal_Foot_Foot.ogg
/music/Outsider/Shaggs/I_Love.mp3
/music/Outsider/Shaggs/Things_I_Wonder.ogg
如果搜索使用的是相对路径,那么搜索结果使用的也是相对路径;如果搜索使用的是绝对路径,那么结果使用的也会是绝对路径。从本章后面的例子中还可以看到这一原则的具体体现。现在只需要记住这一重要思想就可以了。
说明 要找到有关Shaggs的更多信息,可访问www.allmusic.com/cg/amg.dll?p=amg&sql=11:qyk9kett7q7q,或只是在www.allmusic.com中搜索“Shaggs”。