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