one day one linuxfind 用法详解小记

Posted 曾想仗剑走天涯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了one day one linuxfind 用法详解小记相关的知识,希望对你有一定的参考价值。

find命令的功能很强大,查找文件的选项很多,所以这是一个很实用并且很常用的linux命令。但是他有个缺点就是搜索的时候比较慢的。而与之相对的有一个locate命令。

 

  1. find的命令格式

    find  pathname  -option  [-print ] [  -exec  -ok   command]  {} \\;

  

  2. 命令参数:

          pathname : find命令所查找的目录路径。相对路径和绝对路径都可以的。

      -print:   find命令将匹配的文件输出到标准输出(默认就是将找到的文件输出到标准输出)

    -exec command {} \\ :  find命令对匹配的文件执行该参数所给出的command命令,注意"{}"与  "\\"之间的空格。

    -exec ok {} \\:   与exec命令参数差不多,只不过多了一个检查,在执行每一个命令之前要求用户来确认是否执行。

      

  3. 命令的选项:

    常用:

    -name filename :   查找名为filename的文件(常用的选项)

    文件属性:

    -perm  xxxx   :   按照xxxx代表的执行权限来查找

    -user   username :按照文件属主来进行查找

    -group  groupname: 按照文件属组进行查找 

    -nouser     查找无有效属主的文件,即属主在/etc/passwd中不存在的

    -nogroup         查找无有效属组的文件,即属主在/etc/groups中不存在的

    文件时间属性:

    -mtime -n +n   按照文件更改时间进行查找  ,  -n指n天以内   +n指n天以前

    -atime  -n  +n   按照文件访问时间来查找

    -ctime  -n   +n   按照文件创建时间来查找

      -newer  file1 ! file2  查找更改时间比file1新但是比file2旧的文件

     文件类型属性:

    -type   查找某一个类型的文件   

    b - 块设备目录

    d - 目录

    c - 字符设备文件

    p - 管道文件

      l - 符号链接文件

    f - 普通文件

     其他类型

    -size n [c] : 查找文件长度为n块的文件  ,带 c 的时候表示文件长度以字节计算。

    -depth:  查找文件的时候首先查找当前目录下,然后再查找其子目录。

    -fstype:  查找位于某一类型的文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本文件系统的信息。

    -mount : 在查找文件时不跨越文件系统mount点。(这句话不是太理解哈,等下实例中看下。)

    -follow :  如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

    -cpio:  对匹配的文件使用cpio命令,将这些文件备份到磁盘设备中。

    -prune : 忽略某个目录

  

    另外,下面三个的区别:

    -amin n   查找系统中最后N分钟访问的文件

    -atime n  查找系统中最后n*24小时访问的文件

    -cmin n   查找系统中最后N分钟被改变文件状态的文件
    -ctime n  查找系统中最后n*24小时被改变文件状态的文件
    -mmin n   查找系统中最后N分钟被改变文件数据的文件
    -mtime n  查找系统中最后n*24小时被改变文件数据的文件

  4. 使用实例

  (1)-name选项

            比较常用的选项,并且可以使用匹配符或者正则表达式来匹配文件(匹配符与正则的区别需要注意下)。如果是具体的文件名可以引号引起来也可以不用引号,但是文件名匹配模式是一定要用引号引起来的。

    

在根目录“/”下查找文件名为 "test.txt"的文件
# find / -name  "test.txt"  -print

#匹配符与正则表达式的应用:
查找目录下所有的 “*.log”
# find . -name "*.log" -print

查找目录下以大写字母开头的文件
# find / -name "[A-Z]*" -print

查找一个以小写字母开头,数字结尾的文件
# find / -name "[a-z]*[0-9]" -print

  

    (2)文件属性选项

      -perm   xxx   

查找文件权限为755的文件,可以和-name混合使用
# find / -perm  755 -print

查找一个文件属主是root,属组也是root的文件(这种单独使用是没什么意义的,这都是一些限制条件混合使用)
# find / -user root -group root -print

当然还有查找属主和属组都已经被删除的文件
# find . -nouser -nogroup -print

 

    (3)文件时间属性

# 查找最后48小时内访问过的文件
$  find / -atime  -2

# 查找最后24小时内修改过的文件
$  find / -mtime -1

    (4)忽略某个目录

使用选项 -prune  支出忽略的目录。使用-prune选项的时候注意不要和-depth一起用,-prune会被忽略。

#  忽略test目录下的hello目录
$  find test  -path "test/hello" -prune -o -print 

说明下:find  [-path] [expression]

在路径列表后面是表达式

find test  -path "test/hello" -prune -o -print
-a 和 -o 是shell中的短路求值,与 && 和 || 结果类似。
-path "test/hello" 为真,则求值-prune ,则与逻辑为真,后面的-print不需要执行,否则求值 -print(利用-o的短路特性)
可以理解为如下所示的shell流程:
if -path "test/hello" then
-prune
else
-print

 

忽略多个目录的操作:

find  test  \\( -path test/test4 -o -path test/test3 \\)  -prune  -o  -print 

增加一个转义 "\\"

 

查找某一确定文件,-name等选项加在-o 之后

命令:

find test \\(-path test/test4 -o -path test/test3 \\) -prune -o -name "*.log" -print

 

   (5)组合使用:操作之后加入命令   find  pathname  -option  [-print ] [  -exec  -ok   command]  {} \\;

 

#查看当前目录下的所有普通文件并通过ls -l来显示详细信息
$ find . -type f -exec ls -l {} \\;

#还可以再加一些条件,组合使用
$ find logs  -type f -mtime +5 -exec -ok rm -rf {} \\
#删除五日以前有更改的文件  这个命令在运维的时候很有用,删除一些日志文件的时候。

 

*有一个很好的应用场景是:find查找文件,然后grep看文件里面是否有我们需要的字段

#在/tmp中寻找*.h,并在这些文件中查找"TEST"字段
$ find /tmp -name *.h | xargs -n50 grep TEST
$ find   /tmp   -name "*.h"   -exec grep "TEST"   {}   \\; -print

#将查找到的文件复制到指定地方
$ find /tmp  -name test -exec cp \'{}\' /test \';\'

特殊文件可以使用cpio的
$ find dir -name filename -print | cpio -pdv newdir  (暂时还不之后cpio的用法,先记录下来)


#可以使用管道来处理find查找出来的 文件列表
$ find ./ -name "*.php" | ls -l -full-time 2>/dev/null | grep "2016-07-03 22:39"
查找2016-07-03 22:39更改过的文件

  

 

-----

参考链接:

每天一个linux命令find

linux find用法实例

Linux Find 命令精通指南

吴秦(Tyler)【日记小常】linux中强大且常用命令:find,grep

25simple examples of Linux Find command

以上是关于one day one linuxfind 用法详解小记的主要内容,如果未能解决你的问题,请参考以下文章

one day one linuxlinux下的软件包管理工具

One Day

One day one cf,Keep Wa away from me.

Python day one

Starting Day One

python_one-day