find命令

   find命令主要用于文件查找。

    要列出当前目录及子目录下所有的文件和文件夹,可以采用以下方法:

$ find . –print

    -print指明打印出匹配文件的文件名(路径),’\n’作为分割符。使用-print0可指明使用’\0’作为分割符。

    我们可根据文件名进行搜索,如搜索以.txt结尾的文件名:

$ find . –name “*.txt” –print

    另外还有一个-iname选项,与-name选项的区别仅在于-iname选项忽略字母大小写。

    如果想匹配多个条件中的一个,可以采用OR条件操作:

$ find . \( –name “*.txt” –o –name “*.pdf” \) –print

./new.txt

./new.pdf

    上面的代码打印出所有的.txt和.pdf文件。\(以及\)用于将它们之中的内容视为一个整体。

选项-path(同样也有-ipath)将文件路径作为一个整体进行匹配,如:

$ find . –path “*new*” –print

./new.txt

./new.pdf

./new.py

    选项-regex的参数和-path的类似,只不过-regex(同样也有-iregex)是基于正则表达式来匹配文件路径的。

$ find . –regex “.*\(\.txt\|\.pdf\)$” –print

./new.txt

./new.pdf

    find也可以用”!”否定参数的含义,如:

$ find . ! –name “*.txt” –print

.

./new.pdf

./new.py

    find命令在使用时会遍历所有的子目录。但可以使用-maxdepth和-mindepth来限制find命令遍历的深度。如:

$ find . maxdepth 1 –print

$ find . mindepth 2 –print

    -maxdepth和-mindepth应该作为find的第3个参数出现。如果作为第4个或之后的参数,就可能会影响到find的效率,因为它不得不进行一些不必要的检查。

    Linux中文件具有不同的类型,例如普通文件、目录、字符设备、块设备、符号链接、硬链接、套接字以及FIFO等。Find命令中的-type可以对文件搜索进行过滤。如:

$ find . –type d –print    #列出所有的目录

$ find . –type f –print    #列出普通文件

$ find . –type l –print    #列出符号链接

$ find . –type c –print    #列出字符设备

$ find . –type b –print    #列出块设备

$ find . –type s –print    #列出套接字

$ find . –type p –print    #列出FIFO

    Linux文件系统中的每一个文件都有三种时间戳:

l  访问时间(-atime):用户最近一次访问文件的时间。

l  修改时间(-mtime):文件内容最后一次被修改的时间。

l  变化时间(-ctime):文件元数据(例如权限或所有权)最后一次改变的时间。

    -atime、-mtime、-ctime可作为find的时间参数,它们可以整数值给出,单位是天。这些整数值还可以带有-或+,如:

$ find . type f –atime -7 -print        #打印最近7天被访问过的所有文件

$ find . type f –atime 7 –print        #打印恰好在7天前被访问过的所有文件

$ find . type f –atime +7 –print       #打印出访问时间超过7天的所有文件

    另外,还有以分钟作为计量单位的,包括:

l  -amin(访问时间)

l  -mmin(修改时间)

l  -cmin(变化时间)

    find命令还有一个-newer参数,使用-newer,可以指定一个用于比较时间戳的参考文件,如:

$ find . –type f –newer new.txt –print     #打印比file.txt修改时间更新的所有文件

    find还可以根据文件大小搜索:

$ find . –type f –size +2k                  #大于2KB的文件

$ find . –type f –size -2k                  #小于2KB的文件

$ find . –type f –size 2k                   #大小等于2KB的文件

    除了k之外,还有:

l  b——块(512字节)。

l  C——字节。

l  w——字(2字节)。

l  k——千字节。

    文件匹配还可以根据文件权限进行,如:

$ find . –type f –perm 644 –print           #打印出权限为644的文件

    还可以用该方法找出那些没有设置好权限执行权限的PHP文件:

$ find . type f –name “*.php” ! –perm 644 –print

    也可以根据文件的所有权进行搜索,如:

$ find . –type f –user baojie –print         #打印用户baojie拥有的所有文件

    find命令可以借助选项-exec与其他命令进行结合,如将所有.py添加可执行权限:

$ find . –name “*.py” –exec chmod +x {} \;

    {}是一个特殊的字符串,与-exec选项结合使用。对于每一个匹配的文件,{}会被替换成响应的文件名。

    无法在-exec参数中直接使用多个命令,但可以把多个命令写到一个shell脚本中,然后再-exec中使用这个脚本。

    -exec能够同printf结合起来生成有用的输出信息。例如:

$ find . –name “*.txt” –exec printf “Text file: %s\n” {} \;

    find命令在执行搜索时还可以跳过一些子目录,如下示例:

$ find . \( -name “old” –prune \) –o \( -type f –print \)

    以上命令打印出不包括在old目录中的所有文件的名称。

posted @ 2015-06-10 17:11  jimshi  阅读(277)  评论(0编辑  收藏  举报