Linux中find常见用法

原文地址:http://tutorials.hostucan.cn/article-linux-find

find命令主要是用于文件查找,非常有用,但对于初学者,会发现它有点怪异.为啥呢?因为用的少,用多了,习惯了,也就不怪异了.让我们先从一个简单例子开始.

$find/-nametest

./backup/modules/field/modules/test

$

“查找根目录下名称为’test’的文件”,这条命令会让系统查找所有文件,包括挂载的文件设备.这可能需要花费一段时间,尤其是查找网络共享硬盘.不过,我们可以通过参数-mount告诉,系统忽略挂载设备:

$find/-mount-nametest

find命令格式如下:

find[path][options][tests][actions]

[path]

路径;应该不难理解.这里可以使用绝对路径,也快成使用相对路径.

[options]

参数;比较常用的参数用:

-depth:先查找子目录再查看当前目录-follow:跟踪查找连接文件-maxdepthsN:子目录递归最大深度-mount(or-xdev):忽略挂载文件

[tests]

条件匹配;

-atime-N/N/+N:最后一次访问文件的时间在N天内/N天/N天前-mtime-N/N/+N:最后一次修改文件的时间在N天内/N天/N天前-namepattern:与pattern相匹配的文件(包括目录)-newerf1!f2:比文件f1新的文件,比文件f2旧的文件-typeb/d/c/p/l/f:文件类型为:块设备/目录/字符设备/管道/链接/文件-userusername:文件的所有者是username

我们可以通过以下操作符,将匹配条件连起来:

-not(!):方向匹配-and(-a):而且-or(-o):或者

我们还可以通过括号将一些匹配符号合并.例如

\(-newer-o-name‘*test’\)

现在举一个稍微有点复杂的例子,查找当天被访问过或修改过的文件,文件名包含’python’,而起文件所有者是’anthony’:

#find/\(-atime-1-or-mtime-1\)-and-name'*python*'-and-user'anthony'

/home/anthony/svn_code/subversion-1.7.2/subversion/bindings/swig/python

/home/anthony/svn_code/subversion-1.7.2/subversion/bindings/ctypes-python

/home/anthony/python

/home/anthony/python/Python-3.2.2/build/temp.linux-x86_64-3.2/home/anthony/python

/home/anthony/python/Python-3.2.2/Tools/unicode/python-mappings

/home/anthony/.local/lib/python3.2

#

[actions]

操作;

-execcommand:执行命令,具体介绍见后文.-okcommand:和-exec一样,除了命令执行需要用户许可.-print:打印文件名-ls:列出文件详细信息

现在举例说明-execcommand

anthony@z:~$find-mtime-1-typef-execls-l{}\;

-rw-r--r--1anthonyanthony0Apr512:04./search/search.txt

-rw-------1anthonyanthony22997Apr512:04./.viminfo

-rw-------1anthonyanthony125Apr514:25./.lesshst

anthony@z:~$

简单地说,-exec或-ok,将查询到的文件作为参数传递给后面的命令执行,而参数的位置用{}标识,即命令中,“{}”替换成find查找出来的文件名,最后”\;”表示结束符.

相关推荐