Linux命令行find小技巧

  命令行一直是Linux用户用来解决问题的首要选择,当需要做某件事时,你只要想好如何去做,从那时起你就知道该如何做了。

  不过很少有人花些时间系统地了解处理工具在处理过程中的输入和输出。因此对于最基本实用工具的功能可能并不是很了解。在本文中,我们将讨论所有shell工具箱中都有的一个重要工具:find实用工具。

  正如它的名字所表示的,find是在磁盘中查找满足给定标准的文件和目录的应用程序。默认情况下,它从当前目录开始,向下扫描所有子目录。find基于各种不同的文件属性来进行查询,而且可以对查询结果执行某种操作,通常是对每个查询结果运行一些程序。

  让我们来看一些例子:首先,为了在当前目录或子目录中查找所有html文件,我们可以使用:

$ find -name "*.html" -type f

  该命令有两个测试条件,第一个,"-name"用于检验搜索过程中的每个文件名,如果你需要对大小写敏感,可以使用"-iname"代替。第二个参数是"-type",它用于指定你感兴趣的文件类型。"f"表示我们查找的是普通文件,我们可以使用"d"表示目录或使用"l"表示符号连接。在find 手册中可以看到该工具的所有选项。

  在上面的这个例子中,因为我们要在当前目录中搜索,所以没有指定路径。你可以从你的系统中的任何目录开始搜索,例如,你知道html文件存放在两个位置之一中,那么我们就可以通过指定一个开始搜索点使查询更快更准确。

$ find /var/www /home/nickg/public_html -name "*.html" -type f

  这个查询从web服务器的根目录开始,搜索我的html根目录和它的子目录,希望能够得到我们想要的结果,而不是像web浏览器缓存或html帮助文件。

  默认情况下,find遍历所有子目录,但是你可以通过指定最大深度来控制这个行为。在前面的例子中,如果我们只想搜索这两个目录不想搜索下一层,你可以添加"-maxdepth 1"到命令中。设置最大深度为0表示只检验命令行中的给定文件。同样,你可以设定最小深度,从而避免搜索位于根目录的文件。

继续阅读