find [path] [expression]
例如:find /home -name \*.o -exec rm '{}' \;
find:
实时精确,支持众多查找标准,遍历指定目录中的所有文件完成查找,速度慢;
find 【查找路径】 【查找标准】 【查找到以后的处理运作】
查找路径:默认为当前目录
查找标准:默认为指定路径下的所有文件
如果想只需要目录列表可以用如下进行测试:
find / -type d | wc -l
-type d 限制了只搜索目录
find / -type f |wc -l
普通文件列表
-name 后面文件名称用双引号,是防止 shell 展开路径名
-size 后面跟随文件或者目录大小 +-表示大于规定或者小于规定的值
下面的字符可以被用来指定测量单位:
字符 单位
b 512 个字节块。如果没有指定单位,则这是默认值。
c 字节
w 两个字节的字
k 千字节 (1024 个字节单位)
M 兆字节 (1048576 个字节单位)
G 千兆字节 (1073741824 个字节单位)
测试条件 描述
-cmin n 匹配的文件和目录的内容或属性最后修改时间正好在 n 分钟之前。指定少于 n 分钟之前,使用 -n,指定多于 n 分钟 之前,使用 +n。
-cnewer file 匹配的文件和目录的内容或属性最后修改时间早于那些文件。
-ctime n 匹配的文件和目录的内容和属性最后修改时间在 n\*24 小时之前。
-empty 匹配空文件和目录。
-group name 匹配的文件和目录属于一个组。组可以用组名或组 ID 来表示。
-iname pattern 就像 -name 测试条件,但是大小写敏感。
-inum n 匹配的文件的 inode 号是 n。这对于找到某个特殊 inode 的所有硬链接很有帮助。
-mmin n 匹配的文件或目录的内容被修改于 n 分钟之前。
-mtime n 匹配的文件或目录的内容被修改于 n\*24 小时之前。
-name pattern 用指定的通配符模式匹配的文件和目录。
-newer file 匹配的文件和目录的内容早于指定的文件。当编写 shell 脚本,做文件备份时,非常有帮助。每次你制作一个备份,更新文件(比如说日志) ,然后使用 find 命令来决定自从上次更新,哪一个文件已经更改了。
-nouser 匹配的文件和目录不属于一个有效用户。这可以用来查找属于删除帐户的文件或监测攻击行为。
-nogroup 匹配的文件和目录不属于一个有效的组。
-perm mode 匹配的文件和目录的权限已经设置为指定的 mode。mode可以用八进制或符号表示法。
-samefile name 相似于 -inum 测试条件。匹配和文件 name 享有同样 inode号的文件。
-size n 匹配的文件大小为 n。
-type c 匹配的文件类型是 c。
-user name 匹配的文件或目录属于某个用户。这个用户可以通过用户名或用户 ID 来表示。
find 命令的逻辑操作符
因为圆括号对于 shell 有特殊含义,我们必须转义它们,来阻止 shell 解释它们。在 圆括号字符之前加上一个反斜杠字符来转义它们。
操作符 描述
-and 匹配如果操作符两边的测试条件都是真。可以简写为 -a。 注意若没有使用操作符,则默认使用 -and。
相当于c语言中的&&
-or 匹配若操作符两边的任一个测试条件为真。可以简写为 -o。
相当于C语言中的||
-not 匹配若操作符后面的测试条件是真。可以简写为一个感叹号 (!) 。
和c语言中的!一样
() 把测试条件和操作符组合起来形成更大的表达式。这用来 控制逻辑计算的优先级。默认情况下,find 命令按照从左到 右的顺序计算。经常有必要重写默认的求值顺序,以得到期 望的结果。即使没有必要,有时候包括组合起来的字符,对 提高命令的可读性是很有帮助的。注意因为圆括号字符对 于 shell 来说有特殊含义,所以在命令行中使用它们的时候, 它们必须用引号引起来,才能作为实参传递给 find 命令。 通常反斜杠字符被用来转义圆括号字符。
预定义的操作
操作 描述
-delete 删除当前匹配的文件。
-ls 对匹配的文件执行等同的 ls -dils 命令。并将结果发送到标 准输出。
-print 把匹配文件的全路径名输送到标准输出。如果没有指定其它 操作,这是默认操作。
-quit 一旦找到一个匹配,退出。这里是 find 命令支持的普通文件类型测试条件:
find ~ -type f -name '*.BAK' -print
记住,在每个测试和操作之间会默 认应用 -and 逻辑运算符。我们也可以这样表达这个命令,使逻辑关系更容易看出:
find ~ -type f -and -name '*.BAK' -and -print
用户定义的行为
-exec command {} ;
{}表示find查找到一个文件的结果 后面;表示结束。
这里的 command 就是指一个命令的名字,{} 是当前路径名的符号表示,分号是要求的界 定符表明命令结束。
除了预定义的行为之外,我们也可以唤醒随意的命令。传统方式是通过 -exec 行为。
当 -exec 行为被使用的时候,若每次找到一个匹配的文件,它会启动一个新的指定命令的实 例。我们可能更愿意把所有的搜索结果结合起来,再运行一个命令的实例。
ls -l file1
ls -l file2
ls -l file1 file2
上面命令表示显示file1 file2的详细信息,我们更喜欢用第3个命令的方法来表示file1 file2 这里就涉及到一个效率问题,
ls-l 命令执行次数最少效率最高
观察下面两条命令:
find ~ -type f -name 'foo*' -exec ls -l '{}' ';'
find ~ -type f -name 'foo*' -exec ls -l '{}' +
执行效果是一样的,但是第二条命令只执行了一次ls -l 。
虽然我们得到一样的结果,但是系统只需要执行一次 ls 命令。
xargs
这个 xargs 命令会执行一个有趣的函数。它从标准输入接受输入,并把输入转换为一个特 定命令的参数列表。
文件类型 描述
b 块设备文件
c 字符设备文件
d 目录
f 普通文件
l:link,链接文件
p:pipe,管道文件
s:socket,套接字文件
find ~ -type d | wc -l
匹配标准:
-name 'FILENAME':对文件名作精确匹配
文件名通配:
-iname 'FILENAME':文件名匹配时不区分大小写
-regex PATTERN:基于正则表达式进行文件名匹配
-user USERNAME:根据属主查找
-group GROUPNAME:根据属组查找
-uid UID:根据UID查找
-gid GID:根据GID查找
-nouser:查找没有属主的用户
-nogroup:查找没有属组的用户
-type 类型查找
[+|-]#k ##大于#k,小于#k
#M
#G
组合条件:
-mtime:根据修改时间(写入而修改)modify
-ctime:根据改变时间(改变文件内容,权限,所属组主或者设置链接随inode类容更改而更改)change
-atime:根据访问时间(读取执行修改) access
[+|-]#:+号表示#天之前,-号表示#天之内
[root@Kevin ~]# find ./ -amin -5 ##查找并显示当前目录下,5分钟之内访问过的文件
-perm MODE:精确匹配
/MODE:任意一位匹配即满足条件
-MODE:文件权限能完全包含此MODE时才能显示
[root@Kevin ~]# find ./ -perm -644 ##完全匹配
[root@Kevin ~]# find ./ -perm /644 ##任意匹配
处理动作:
-print:显示
-ls:类似ls -l的形式显示每一个文件的详细信息
-ok COMMAND {} \;每一次操作都需要用户确认
-exec COMMAND {} \;不需要确认
[root@Kevin ~]# find ./ -perm -006 -exec chmod o-w {} \; ##{}表示引用找到的文件,后面以\;
xargs
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。
###################使用 i 参数 ##################
[root@test05 ab]# find . -type f -name "*.txt" | xargs -i cp {} /tmp/k/
[root@test05 ab]# ls ../k/
mini.txt nii.txt ni.txt
[root@test05 ab]#
################### 使用 I 参数 ################
[root@test05 ab]# find . -type f -name "*.txt" | xargs -I {} cp {} /tmp/n/
[root@test05 ab]# ls ../n/
mini.txt nii.txt ni.txt
结果出来了,
加-i 参数直接用 {}就能代替管道之前的标准输出的内容;
加 -I 参数 需要事先指定替换字符
xargs具体用法,请参考余力的帖子
http://www.aminglinux.com/bbs/thread-7093-1-1.html
- find命令应用exec及xargs
find最普通的用法是查找文件,然后要对文件进行处理就需要用到参数-exec. 先看下manpage中介绍: -exec command ; Execute command; status is re ...
- find命令之exec和xargs
exec: find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec 参数后面跟的是c ...
- Linux命令学习之xargs命令
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具.它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数.xargs也可以将 ...
- centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs 第十六节课
centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,cur ...
- Linux文件查找命令find和xargs详解
PS:find是个很强大的命令,能够匹配正则,查找对应权限,能够帮你精确的定位你的系统中的任何地方任何目录下的文件.下面这篇是关于find命令用法最详细的一篇了,记录下.还有要注意的:本文的分号:其实 ...
- linux常用命令(19)find xargs
在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...
- 每天一个 Linux 命令(20):find命令之exec
find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec 参数后面跟的是command ...
- 每天一个linux命令(20):find命令之exec
find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec 参数后面跟的是command ...
- find命令之exec
find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec 参数后面跟的是command ...
- linux find命令之exec
find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec 参数后面跟的是command ...
随机推荐
- mongodb集成spring
1:首先需要下载mongodb的java驱动包 https://github.com/mongodb/mongo-java-driver/downloads 2:需要下载spring集成mongodb ...
- UILabel文本垂直顶部对齐的方法
也不知道为什么UILabel本身没有提供文本垂直顶部对齐的方法,真的有点晕.我们创建一个简单的UILabel来看看: [box type="info"] UILabel *myLa ...
- 【三支火把】---C语言const用法总结
C语言关键字const相信对于不少C语言新手是既陌生又熟悉的,好像经常见,但是却不知道为何用,怎么用?学习至此,总结一下const的用法,使用程序来帮助你理解该关键字,希望能帮到像我一样的新手. 我看 ...
- lua 学习笔记(一)
lua 中的方法: 1. type("test"): 返回数据类型 2.#"zhangsan": 返回字符串的长度 3.string.gsub("字符 ...
- ubuntu压缩解压
ubuntu安装解压rar 一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了rar解压工具之后,才可以解压.其实在ubuntu下安装rar解压工具是非常简单的,只需要两个步骤就可 ...
- Oracle Linux 6.3下安装Oracle 11g R2(11.2.0.3)
本文主要描写叙述了在Oracle Linux 6.3下安装Oracle 11gR2(11.2.0.3).从Oracle 11g開始,Oracle官方站点不再提供其Patch的下载链接,须要使用Meat ...
- 【03】尽可能使用const
1.为什么搞出const关键字? const指定一个语义约束,指定一个对象不可修改.如果一个对象不可修改,就应该说出来. 2.const与指针 const可以修饰指向之物,也可以修改指针本身.STL中 ...
- Discuz建站教程:本地安装discuz网站
网站建目前都很简单,建站容易,管理难,网站做大优化更难.本人有建站经验,目前给大家分享一下如何建站,当然,目前使用的是本地建站,因为非本地建站需要购买域名和网站空间,当然,朋友们想真正建站的,对于一些 ...
- 验证(Verification)与确认(Validation)的差别
验证(Verification)与确认(Validation)的差别 说法一: (2)“验证(Verification)”的涵义 通过提供客观证据对规定要求已得到满足的认定. (2)“确认(Valid ...
- qt QSqlQuery
QT数据库QSqlQuery SQL执行操作 QSqlQuery提供了对数据库记录的Select.Insert.Update.Delete操作. SELECT操作: QSqlQuery query ...