10.1 根据文件名搜索文件

find -name

find命令的基本用途是根据文件名(或文件名的一部分)查找文件,因此也就有了-name选项。在默认情况下,find会自动递归搜索整个目录结构。要在music盘中查找唯一的Shaggs组下的所有MP3文件,如下所示:

  1. $ cd /media/music
  2. $ find . -name Shaggs
  3. ./Outsider/Shaggs

什么?这个结果肯定不对。find命令找到了文件夹,但没有歌曲。为什么呢?因为没有使用任何通配符,所以find命令搜索的就是名为“Shaggs”的特定文件。只有一项结果可以精确匹配这一名称:包含所要歌曲的文件夹(因为文件夹是一种特殊的文件)。

需要使用通配符,但为了防止shell以我们不期望的方式解释通配符,就必须用引号把搜索内容括起来。下面就用新改进后的方法再搜索一下:

  1. $ find . -name "*Shaggs*"
  2. ./Outsider/Shaggs
  3. ./Outsider/Shaggs/Gimme_Dat_Ting_(Live).mp3
  4. ./Outsider/Shaggs/My_Pal_Foot_Foot.ogg
  5. ./Outsider/Shaggs/I_Love.mp3
  6. ./Outsider/Shaggs/Things_I_Wonder.ogg

用引号把通配符括起来,就找到文件夹和文件了。

说明 正在使用find命令的另一个选项-print,可能你还没有意识到。-print选项告诉find在终端界面上列出它的搜索结果。-print选项默认是打开的,所以不需要在运行find命令时包括该选项。

find命令的另一重要方面是,搜索结果的格式取决于正在搜索的路径。前面使用的是相对路径,所以结果也是按相对路径给出。如果使用绝对路径(以/作为路径的开始),会发生什么呢?

  1. $ find / -name "*Shaggs*"
  2. /music/Outsider/Shaggs
  3. /music/Outsider/Shaggs/Gimme_Dat_Ting_(Live).mp3
  4. /music/Outsider/Shaggs/My_Pal_Foot_Foot.ogg
  5. /music/Outsider/Shaggs/I_Love.mp3
  6. /music/Outsider/Shaggs/Things_I_Wonder.ogg

如果搜索使用的是相对路径,那么搜索结果使用的也是相对路径;如果搜索使用的是绝对路径,那么结果使用的也会是绝对路径。从本章后面的例子中还可以看到这一原则的具体体现。现在只需要记住这一重要思想就可以了。

说明 要找到有关Shaggs的更多信息,可访问www.allmusic.com/cg/amg.dll?p=amg&sql=11:qyk9kett7q7q,或只是在www.allmusic.com中搜索“Shaggs”。