Linux中find命令的点滴积累
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]#
本文为原创,转载请注明出处.