美文网首页Linux我用 LinuxLinux学习之路
Linux中find命令的点滴积累

Linux中find命令的点滴积累

作者: My熊猫眼 | 来源:发表于2019-08-17 13:49 被阅读27次

    find 命令在Linux中的作用非常强大,对于初学者来说,可能有很多的参数并不能很熟练的使用,导致无法充分发挥find的强大作用;本文对部分参数做初步的探索:

    -regex ;这个参数和 -name 有类似的作用,都是通过文件的名字进行匹配,但是二者的不同的点是:
    A. -name 只是对文件的名称做匹配,而-regex 是对 文件的路径做匹配.
    B. 在需要用正则表达式的时候,-regex 会比 -name方便很多,想必你也知道,正则表达式有不同的标准,所以在find命令中可以通过 -regextype 来指定采用的正则表达式规范 , 从而让 -regex 按照指定的正则表达式规范工作,默认是 emacs 规范;
    以下列子查找文件名称是4个数字构成的文件,然后取结果的前10行,其中-regex 采用的是 和 grep 命令相同的正则表达式规范;

    #以下这条命令可得到正确的查找结果
    [root@localhost shell_commands]#  find . -regextype grep -regex ".*/[0-9]\{4\}$" | head
    ./5534
    ./8442
    ./6033
    ./7162
    ./4459
    ./2231
    ./6731
    ./8930
    ./1406
    ./2238
    #以下命令没有找到匹配的结果,因为-regex 表达式忽略了文件的路径“./”
    [root@localhost shell_commands]#  find . -regextype grep -regex "[0-9]\{4\}$" | head
    [root@localhost shell_commands]# 
    #用 -name 参数的时候,写法比较繁琐;
    [root@localhost shell_commands]# find . -name "[0-9][0-9][0-9][0-9]" | head
    ./5534
    ./8442
    ./6033
    ./7162
    ./4459
    ./2231
    ./6731
    ./8930
    ./1406
    ./2238
    

    -mtime; 这个参数相类似的参数有 -ctime, -atime, 其中-mtime 是用的比较多的,个人认为这个参数分开来理解更容易(仅限于按下面的理解,man find是没有下面这种解释的,所以不喜勿喷):
    -m 表示modify time, -c 表示 change time, -a 表示access time. 而 -time表示 表示以day 为单位,-min表示以分钟为单位,所以组合之后的命令有:
    -mtime, -mmin, -ctime, -cmin, -atime, -amin,表示 "文件内容修改时间/属性修改时间/访问时间 在 指定的days/minutes 之前“. 看man帮助文档可以知道:
    通常有 -mtime +n, -mtime -n, -mtime n 之类的三种,那么怎么理解呢?
    比如: -mtime 2 , 表示2x24小时之前修改过的文件,是否可以表示3x24之前的呢?不可以,因为 -mtime 3 才表示3x24之前修改过的啊,所以 -mtime 2 仅仅表示2x24小时之前,但是在3x24之内的文件;
    所以为了表示所有2x24之前所有的,就需要 -mtime +2 , 这样就可以了;
    同理,-mtime -2 , 因为 比2小的只有1,0, 所以表示0x24前,但是在2x24小时以内的文件;
    下面是一个例子:

    #查找24x24小时之前修改过的文件
    [root@localhost bin]# find . -mtime +24 | head | xargs -I{} ls -l {}
    -rwxr-xr-x. 1 root root 155176 Apr 11  2018 ./cp
    -rwxr-xr-x. 1 root root 145960 Apr 11  2018 ./cpio
    lrwxrwxrwx. 1 root root 3 Jun 10 21:23 ./captoinfo -> tic
    -rwxr-xr-x. 1 root root 49992 Apr 11  2018 ./csplit
    -rwxr-xr-x. 1 root root 7192 Sep  7  2017 ./clear
    -rwxr-xr-x. 1 root root 41568 Apr 11  2018 ./cut
    -rwxr-xr-x. 1 root root 100800 Apr 11  2018 ./gzip
    -rwxr-xr-x. 1 root root 57416 Sep  7  2017 ./infocmp
    -rwxr-xr-x. 1 root root 37360 Apr 11  2018 ./fmt
    -rwxr-xr-x. 1 root root 1941 Apr 11  2018 ./zcat
    #查找24小时以内,50分钟之前修改的文件
    [root@localhost bin]# find . -mtime 0 -mmin +50 -type f  -exec ls -l {} \;
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./8442
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./5534
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./10178
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./25213
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./29063
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./11785
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./16410
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./20392
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./12117
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./15474
    #修改其中一个文件,然后重新找50分钟以前,24小时以内修改的文件
    [root@localhost bin]# vim 8442
    [root@localhost bin]# find . -mtime 0 -mmin +50 -type f  -exec ls -l {} \;
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./5534
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./10178
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./25213
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./29063
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./11785
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./16410
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./20392
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./12117
    -rw-r--r--. 1 root root 0 Aug 17 12:34 ./15474
    [root@localhost bin]# date
    Sat Aug 17 13:46:17 CST 2019
    [root@localhost bin]#
    

    本文为原创,转载请注明出处.

    相关文章

      网友评论

        本文标题:Linux中find命令的点滴积累

        本文链接:https://www.haomeiwen.com/subject/ctghsctx.html