[Linux] find命令高级用法 -exec参数 -ok参数

[Linux] find命令高级用法----exec

find命令是linux下一个强大的查找命令。与locate命令相比,它需要遍历磁盘文件,因此查找速度较慢,但正因如此,它的实时性比locate好得多。另外一方面,find命令的查找条件比locate丰富得多。

以名称为条件

最常用的恐怕就是以文件名为条件了,涉及参数-name,-iname,例如:
当前目录下查找以sort开头的文件:

$ find /Users/pobing/Pobing -iname 'T.txt'
/Users/pobing/Pobing/t.txt

$ find /Users/pobing/Pobing -name 't*'
/Users/pobing/Pobing/t1.txt
/Users/pobing/Pobing/t2.txt
/Users/pobing/Pobing/t.txt
以权限为条件

有时候需要查找特定权限的文件,可以使用-perm参数,例如查找当前目录下权限为777的文件:

$ find /Users/pobing/Pobing -perm 777
/Users/pobing/Pobing/t.txt
以文件类型为条件

涉及参数-type,例如要查找当前目录下的符号链接文件:

$ find /Users/pobing/Pobing -type d
/Users/pobing/Pobing
/Users/pobing/Pobing/t3

常有参数有

f 普通文件
d 目录
b 块设备文件
c 字符设备文件
l 符号链接
s 套接字
p 管道文件
以文件大小为条件

参数为 -size

$ find /Users/pobing/Pobing -size +1k
/Users/pobing/Pobing/t2.txt

常用参数有

k 千字节
M 兆字节
G 吉字节
c 字节
b 块,一般为512字节
w 字大小,两个字节
以归属为条件

涉及参数-user,-nouser,-group,-nogroup等,例如:

find ./ -user root  #查找当前目录下root用户的文件
find ./ -nouser   #查找当前目录下root用户的被删除的文件

-group,-nogroup类似的用法,只不过条件是用户组。

以时间为条件

涉及参数-mtime,-atime,-ctime,-newer,-anewer,-cnewer,-amin,-cmin等,例如:

find ./ -mtime 3 #查找3天前更改过的文件
find ./ -mtime -3 #查找3天内更改过的文件
find ./ -mtime 0 #查找今天更改过的文件
find ./ -newer sort.txt #查找比sort.txt修改时间更新的文件
find ./ -anewer sort.txt #查找比sort.txt访问时间更新的文件
find ./ -amin  5 #查找5分钟之前访问过的文件

注:

atime 最后访问时间
mtime 最后修改时间
ctime 最后修改时间,这里包括属性和权限
exec

-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
{} 花括号代表前面find查找出来的文件名。
使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。 exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。

  • 把ls 放到exec中
#find /home/data/mydb/log/ -name 'slow*' -o -name '*bin*' -exec ls -al {} \;
-rw-rw---- 1 mysql mysql 1073742330 Sep 30 15:42 /home/data/mydb/log/mysql-bin.000020
-rw-rw---- 1 mysql mysql 180 Oct  8 10:04 /home/data/mydb/log/mysqld-relay-bin.index
-rw-rw---- 1 mysql mysql 396327289 Oct 10 10:23 /home/data/mydb/log/mysql-bin.000022
-rw-rw---- 1 mysql mysql 111 Oct  8 10:04 /home/data/mydb/log/mysql-bin.index
  • 查找更改为5天前的文件并删除
find/logs -type f -mtime +5 -exec rm {} \ ;

在Shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心使用诸如mv或rm的命令。可以使用安全模式-ok,它将在对每个匹配到的文件进行操作之前提示你。

  • find命令在当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。命令如下所示:
find . -name "*.log" -mtime +5 -ok rm {} \ ;
按[y]键删除文件,按[n]键不删除。
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay.shang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值