linux 文件查找
来源:互联网 发布:汽车英文翻译软件 编辑:程序博客网 时间:2024/06/09 22:20
locate
查找文件最快速的方法就是使用locate(已被mlocate和slocate取代)命令,它会快速的搜索路径名数据库,输出匹配的文件名称。路径名数据库是由updatedb的程序创建和更新,updatedb位于/usr/bin目录下,由/etc/cron.daily目录下的mlocate执行脚本调用执行。
find命令
locate只能使用文件名来查找文件,最强大的查找文件的方法是使用find命令。find可以通过文件的各种属性来查找文件,例如文件名,文件大小,文件类型等。其中文件的各种查找条件可以通过操作符进行连接,即可以使用多种属性查找文件。
操作符
操 作符 描述-and如果测试符两边的条件都为真,则匹配,否则舍弃。如果没有使用操作符,那么默认使用and。可以简写成-a。-or如果操作符两边的任意一个条件为真,那么该文件名匹配,否则让舍弃。可以简写成-o。-not如果操作符后面的条件为真则匹配,可以简写成!()把条件组合起来形成更大的表达式,这用来控制表达式的优先级。默认情况下find按照从左到右的顺序计算。
注:因为圆括号对shell有特殊的含义,所以使用反斜杠转义括号。单个圆括号()中间的内容表示指令群组,shell会产生一个子shell来执行括号中的指令。
find / \( -name "menu" \) -o \( -name "grub" \) >/home/peter/grub_location.txt &
同时表达式执行的时候有一定的规则
expre1的结果操作符 expre2是否执行真-and总要执行假-and从不执行真-or从不执行假-or总要执行条件表达式的执行符合“短路”规则。
预定义的操作
find命令能够根据查找的结果执行指定的操作。
在find命令使用时,每个操作和测试条件之间会默认使用and连接,多个测试条件之间也默认使用and连接。
find ~ -name '*.jpg' print 等价于 find ~ -name '*.jpg' -and print
操作的执行也是符合“短路”计算原则。
自定义操作
除了预定义的操作意外,我们可以唤醒随意命令,传统方式是通过exec方式。
-exec command {} ;
command表示的是要执行的指令,{}表示的是当前路径名,分号是命令结束符,表示当前命令的结束。
由于花括号和分号对于shell有特殊含义,所以需要用引号括起来或者转义。
find ~ -type f -name 'foo*' -exec ls -l '{}' ';'
另外可以通过ok替代exec实现交互。
find ~ -type f -name 'foo*' -ok ls -l '{}' ';'
提高效率
使用exec时,每次找到一个匹配的文件,那么就会启动exec后面的命令的一个实例,我们希望执行
ls -l file1 file2 file3
而不是
ls -l file1
ls -l file2
ls -l file3
有两种方法
1.将exec后面的分号改为加好(+)可以把搜索的结果整合为一个参数列表,只需要执行一次操作即可。
2.使用xargs命令,它从标准输入接受输入,并将 输入转换成特定命令的参数列表。
使用第一种方法进行处理时,exec能够接受的命令长度有限制,所以find命令在命令长度过长的情况下会出现溢出错误,错误信息通常是“参数列太长”或“参数列溢出”。这样就需要使用xargs。当find和xargs配合使用的时候,xargs每次获取一部分文件名称而不是全部,然后重复知道耗尽标准输入,执行带有 –show–limits 选项的xargs 命令,来查看命令行的最大值。
find ~ -type f -name 'foo\*' -print | xargs ls -l
当文件名中出现有空格的时候,那么该空格会被当做界定符,参数列表就会出现错误,为解决这个问题,find 命令和 xarg 程序允许可选择的使用一个 null 字符作为参数分隔符。一个 null 字符被定义在 ASCII 码中,由数字零来表示(相反的,例如,空格字符在 ASCII 码中由数字 32 表示)。find 命令提供的 -print0 行为,则会产生由null 字符分离的输出,并且 xargs 命令有一个 –null 选项,这个选项会接受由 null字符分离的输入。
find -iname ‘*.jpg’ -print0 | xargs –null ls -l
使用这项技术,我们可以保证所有文件,甚至那些文件名中包含空格的文件,都能被正确地处理。
参考资料:
特殊符号:http://linux.vbird.org/linux_basic/0320bash.php#settings_wildcard
- Linux文件搜索查找
- Linux文件搜索查找
- Linux查找文件
- Linux文件查找
- linux 查找文件内容
- linux查找文件内容
- linux查找文件命令
- Linux文件搜索查找
- linux 查找文件路径
- linux查找文件
- linux find 查找文件
- Linux find 查找文件
- linux 查找文件
- linux文件查找
- linux 查找文件路径
- linux查找文件命令
- linux查找文件命令
- Linux下查找文件
- 写给准备参加秋招的学弟学妹们
- 打开浏览器的选择
- vc播放MP3
- I won't if you won't
- while(cin >> v) demo
- linux 文件查找
- 追逐自己的梦想----------辅助制作第十七课:实现技能列表的遍历及判断技能是否可用
- Myeclipse 2014的ssh整合出错java.lang.NoSuchMethodError: antlr.collections.AST.getLine()
- springmvc的特性
- 算法实现-->最长子序列问题
- 实现操作符重载的两种方式
- ImageView.ScaleType
- ACM-BestCoder Round #33
- const 用法总结