电脑技术学习

对话 UNIX,第 7 部分: 命令行惯用语

dn001
grep -H -I -i -n string a
grep -H -I -i -n string b
grep -H -I -i -n string c

  事实上,搜索文件集是一项常见的工作,所以 grep 具有相应的选项以递归遍历整个文件系统层次结构。可以使用 -d recurse 或其同义词 -R 或者 -r。例如,可以使用:

$ grep -H -I -i -n -R string
        /path/to/src

  这个命令与 find/xargs 完成相同的任务。(您将发现,许多与文件相关的 Unix 实用工具都具有递归选项。ls -R 可以递归地列出层次结构中的内容。chmod、chgrp 和 chown 使用 -R 可以递归地将模式、组和所有权变更应用到整个文件系统层次结构。在使用 chmod -R 时,请多加小心。如果删除了目录的执行位,比如 chmod -R a-x,您可能会使得一个目录变得不可使用。为了更具选择性,可以使用 find . -type f | xargs chmod a-x。)

  那么,什么时候应该使用 find/xargs,什么时候应该使用 grep 呢?当需要具有一定的选择性时,可以使用 find。find 命令具有许多选项,使得您可以选择满足特定要求的文件,如“所有在午夜后修改过的、并由 Joe 拥有的常规文件。否则,使用 grep -R 就可以了。

  另一种实用工具可能比 find 使用起来更加方便,并且速度更快。如果您打算根据名称来查找一个文件,那么可以尝试使用 locate 来代替 find -name。locate 命令周期性地(大约每天一次,由系统管理员设置)为系统中所有的文件编制目录,并构建一个由路径和文件名组成的数据库。当您运行 locate 时,它将扫描其私有的数据库,尝试进行匹配。

  例如,运行查询 locate '*.1',将得到名称以 .1 结尾的所有文件和目录。(前面的星号表示匹配任何字符串。)为了方便起见,运行 locate fish 命令与运行 locate '*fish*' 是相同的。

标签: