转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/5916657.html

 

超级强大的find命令。

find搜索是从磁盘搜索,而不是从数据库搜索。

2.4.1 最基础的打印操作

find命令默认接的命令是-print,它默认以\n分隔每个找到的。可以使用-print0来使用\0分隔,这样就不分行了。

/tmp/tmp/b      ç这个和下面的全是第一层的

/tmp/tmp/.x

/tmp/tmp/c

/tmp/tmp/a

[root@xuexi tmp]# find /tmp/tmp -mindepth 2

/tmp/tmp/b/2.log

/tmp/tmp/b/1.log

/tmp/tmp/b/3.log

/tmp/tmp/c/2.sh

/tmp/tmp/c/3.sh

/tmp/tmp/c/1.sh

2.4.2.11 根据文件类型搜索:-type

有以下几种类型:常用的标红了。

b 块设备block (buffered) special

c 字符设备character (unbuffered) special

d 目录directory

p 管道文件named pipe (FIFO)

f 普通文件regular file

l 符号链接symbolic link;

s 套接字socket

[root@xuexi tmp]# find /tmp -type d

/tmp

/tmp/lost+found

/tmp/b

/tmp/d

/tmp/vmware-root

/tmp/tmp

/tmp/tmp/b

/tmp/tmp/c

/tmp/a

/tmp/.ICE-unix

2.4.2.12 根据文件大小搜索:-size

-size +30M表示搜索大于30M的文件或目录,-size 30M表示搜索30M的文件或目录,-size -30M表示小于30M的文件和目录。

除了M,还有

‘b’ 块(512字节,不写单位时默认为块)【for 512-byte blocks (this is the default if no suffix is used)】

‘c’ 字节【for bytes】

‘w’ 两字节的单词,我也不知道这是什么鬼【for two-byte words】

‘k’ KB【for Kilobytes (units of 1024 bytes)】

‘M’ MB【for Megabytes (units of 1048576 bytes)】

‘G’ GB【for Gigabytes (units of 1073741824 bytes)】

搜索所有大于30M的文件。由于有些文件无法访问,所以将错误记录丢黑洞去。

[root@xuexi tmp]# find / -type  f -size +30M 2>/dev/null

/var/lib/rpm/Packages

/usr/lib64/libgcj.so.10.0.0

/usr/lib/locale/locale-archive

/sys/devices/pci0000:00/0000:00:0f.0/resource1

/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc

2.4.2.13 根据文件时间和新旧搜索:-atime(-amin)、-ctime(-cmin)、-mtime(0mmin)、-newer

以天为单位计数的:

-atime:(access time)最后一次访问时间。

-mtime:(modify time)最后一次修改时间。增删改目录里的文件也会modify目录。

-ctime:(change time)元数据最后一次状态改变的时间,包括权限和所有权。

单位是天,但是是根据小时来计算的,即24*n(n可以是小数),2天前就查找距离现在48小时前的。

忽略小数部分。例如,查找前第3天的文件,3*24=72,3.1*24=72,…3.9*24=24,4*24=96,那么72-95.99999小时的都属于这一天的,96小时以后的是3天以前的,即+3,这已经是前第四天了。

 

以分钟为单位计数的:-amin、-mmin、-cmin。

还有一个选项,比较新旧:-newer。这个新旧比较的是modify time,即-mtime。

[root@xuexi tmp]# find /tmp/tmp -newer a

/tmp/tmp

/tmp/tmp/d.txt

注意:没有-older选项。

2.4.2.14 根据权限或所有者搜索:-perm、-user、-group

-perm根据权限搜索,同样有“+mode”、“-mode”和正好等于mode的权限,还有/mode格式,且建议使用/mode格式替代“+mode”,因为man find pages说的。

Ø  -perm mode:正好等于mode权限的。

如0766,搜索权限正好是0766的所有文件。

Ø  -perm /mode或+mode:指包含权限,搜索包含mode中的任意一权限位的权限文件,可以包含所有者权限,所属组权限和其他人权限。

如+0766,则0700也会被搜索出来,因为包含了所有者的7权限,同理6也是一样的。

Ø  -perm -mode:指搜索比mode权限更大更严格的的文件。

如-0766,则只能搜索出0776、0767、0777三种权限的文件。

也可以使用符号位的方法来表示,有u(所有者位)、g(所属组位)、o(其他位)、a(所有位)。如-perm /u+x,a+r表示至少包含所有人可读,所有者可写的权限。

-user和-group指定按所有者(或UID)和所属组(或GID)来查找。

2.4.2.15 删除匹配的文件:-delete

可以将查找出来的文件删除掉。

[root@xuexi tmp]# find /tmp/tmp -name "*.sh"

/tmp/tmp/c/2.sh

/tmp/tmp/c/3.sh

/tmp/tmp/c/1.sh

[root@xuexi tmp]# find /tmp/tmp -name "*.sh" -delete

[root@xuexi tmp]# find /tmp/tmp -name "*.sh"

[root@xuexi tmp]#

2.4.3 find配合命令

find可以配合命令来处理查找出来的数据。

-exec command:command为要执行的命令,其中使用{}来接收find的结果,这和xargs的 -i 选项是一样的。命令只能是非别名命令,例如不能执行ll,但是可以执行ls -l。

该命令之后一定要接分号";",表示exec的操作到此结束。也就是说,额外要执行的命令是在"-exec"和";"之间的,而分号";"具有续接第二条命令的特殊意义,所以需要转义,即使用“\;”。

也就是说command之后一定要接“\;”,并且在转义符\之前要有一个空格分隔。

find的不足之处在于一次find只能执行一个命令,但是可以通过将多个命令放进脚本让脚本作为command来改变这个弱点。

-print:将搜索结果分行\n显示出来,默认就是这个选项。还有-print0是将搜索结果使用\0显示出来。

-ok:和-exec功能一样,只是是交互式的询问处理。

测试"-exec":

[root@xuexi tmp]# find / -type f -size +30M 2>/dev/null -exec ls -lh {} \; 

-rw-r--r--. 1 root root 33M Sep 22 17:13 /var/lib/rpm/Packages

-rwxr-xr-x. 1 root root 47M Oct 15  2014 /usr/lib64/libgcj.so.10.0.0

-rw-r--r--. 1 root root 95M Feb 18  2016 /usr/lib/locale/locale-archive

-rw------- 1 root root 128M Sep 26 19:24 /sys/devices/pci0000:00/0000:00:0f.0/resource1

-rw------- 1 root root 128M Sep 26 19:24 /sys/devices/pci0000:00/0000:00:0f.0/resource1_wc

再例如:

[root@xuexi tmp]# find /tmp/tmp;echo -e "\n******next command********\n";find /tmp/tmp -exec ls -l {} \;

/tmp/tmp

/tmp/tmp/b

/tmp/tmp/.x

/tmp/tmp/c

/tmp/tmp/d.txt

/tmp/tmp/a

 

******next command********

 

total 16

-rw-r--r-- 1 root root    7 Sep 26 20:32 a

drwxr-xr-x 2 root root 4096 Sep 26 22:08 b

drwxr-xr-x 2 root root 4096 Sep 26 22:09 c

-rw-r--r-- 1 root root    2 Sep 26 20:56 d.txt

total 0

-rw-r--r-- 1 root root 20 Sep 26 19:03 /tmp/tmp/.x

total 0

-rw-r--r-- 1 root root 2 Sep 26 20:56 /tmp/tmp/d.txt

-rw-r--r-- 1 root root 7 Sep 26 20:32 /tmp/tmp/a

从这个结果中可以看出来,-exec后的命令应用于find后的每一个结果。例如上面首先执行ls -l /tmp/tmp,在执行ls -l /tmp/tmp/b,之后执行后面的每一个。

也可以使用-ok来验证这一点。

[root@xuexi tmp]# find /tmp/tmp -ok ls -ld {} \;    

< ls ... /tmp/tmp > ? y

drwxr-xr-x 4 root root 4096 Sep 26 20:56 /tmp/tmp

< ls ... /tmp/tmp/b > ? y

drwxr-xr-x 2 root root 4096 Sep 26 22:08 /tmp/tmp/b

< ls ... /tmp/tmp/.x > ? y

-rw-r--r-- 1 root root 20 Sep 26 19:03 /tmp/tmp/.x

< ls ... /tmp/tmp/c > ? y

drwxr-xr-x 2 root root 4096 Sep 26 22:09 /tmp/tmp/c

< ls ... /tmp/tmp/d.txt > ? y

-rw-r--r-- 1 root root 2 Sep 26 20:56 /tmp/tmp/d.txt

< ls ... /tmp/tmp/a > ? y

-rw-r--r-- 1 root root 7 Sep 26 20:32 /tmp/tmp/a

[root@xuexi tmp]# find /tmp/tmp -ok ls -ld {} \;

< ls ... /tmp/tmp > ? n

< ls ... /tmp/tmp/b > ? n

< ls ... /tmp/tmp/.x > ? n

< ls ... /tmp/tmp/c > ? n

< ls ... /tmp/tmp/d.txt > ? n

< ls ... /tmp/tmp/a > ? n

SHELL脚本攻略(学习笔记)--2.4 find的更多相关文章

  1. Linux Shell脚本攻略 读书笔记

    Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...

  2. linux shell 脚本攻略学习20--awk命令入门详解

    awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...

  3. Linux Shell脚本攻略学习总结:一

    终端打印 终端打印的常用命令有两个:echo和print 首先,我先介绍echo 1.echo echo这个命令接受三种形式的参数,实例如下: echo "Hello World" ...

  4. linux shell 脚本攻略学习3

    1.Bash中的READ命令 #读取n个字符存入变量 read -n number_of_chars variable_name 示例: amosli@amosli-pc:~$ read -n var ...

  5. linux shell 脚本攻略学习2

    1.关于文件描述符和重定向: 文件描述符是与一个打开的文件或数据流相关联的整数.文件描述符0.1以及2是系统预留的. 0——stdin(标准输入) 1——stdout(标准输出) 2——stderr( ...

  6. linux shell 脚本攻略学习19--sed命令详解

    sed(意为流编辑器,英语“stream editor”的缩写)是Unix/linux常见的命令行程序.sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出,即文本替换.sed通常 ...

  7. Linux Shell 脚本攻略学习--四

    linux中(chattr)创建不可修改文件的方法 在常见的linux扩展文件系统中(如ext2.ext3.ext4等),可以将文件设置为不可修改(immutable).某些文件属性可帮助我们将文件设 ...

  8. Linux Shell脚本攻略学习总结:三

    根据扩展名切分文件名 首先,我们先来看两个例子: file_jpg="sample.jgp" name=${file_jpg%.*} echo File name is : $na ...

  9. Linux Shell脚本攻略学习总结:二

    比较与测试 程序中的流程控制是由比较和测试语句来处理的. 我们可以用if,if else 以及逻辑运算符来执行测试,而用一些比较运算符来比较数据项.另外,有一个test 命令也可以用来进行测试.让我们 ...

  10. linux shell 脚本攻略学习5---find命令详解

    1.find命令详解 语法: find base_path#base_path可以是任何位置,find会从该位置向下找 实例: amosli@amosli-pc:~$ find /home/amosl ...

随机推荐

  1. cocos2d-x 3.2 listview scorllview 等容器在小米华为等部分手机显示泛白解决

    感觉记不住,代码贴上以免以后难找 在proj.android\src\org\cocos2dx\cpp\AppActivity.java 中的 public class AppActivity ext ...

  2. iTunesConnect进行App转移2-官方说明

    Can I transfer an app to another developer's iTunes Connect account? Yes, you can transfer your app ...

  3. linux iftop流量查看工具的安装与使用

    1.安装依赖包yum install flex byacc  libpcap ncurses ncurses-devel libpcap-devel 2.下载iftop wget http://www ...

  4. windows环境下 svn 客户端

      

  5. (转) Deep learning architecture diagrams

    FastML Machine learning made easy RSS Home Contents Popular Links Backgrounds About Deep learning ar ...

  6. IOS5中的Safari不兼容Javascript中的Date问题

    在IOS5以上版本(不包含IOS5)中的Safari浏览器能正确解释出Javascript中的 new Date('2016-06-07') 的日期对象. 但是在IOS5版本里面的Safari解释ne ...

  7. unity, 顶点对齐

    按住v键,选中物体的一个顶点,可以对齐到其它物体的某个顶点上. 参考https://docs.unity3d.com/Manual/PositioningGameObjects.html

  8. 全景VR视频外包公司:长年承接VR全景视频外包(技术分享YouTube的360全景视频)

    虽然比预期来得晚了些,但YouTube终于支持360度全景视频了,这应该会吸引不少VR(虚拟现实)爱好者.今年1月,Google就表示这一功能将在“接下来”的几周出现.现在YouTube上已经有了一些 ...

  9. [转]App Store 审核、限时免费、排行、推荐机制技巧精华汇总

    在 App Store 上,什么样的应用会得到推荐? 这个问题问的非常大,而且编辑推荐很多个人元素在里面,我试着用推荐Ovi Store应用的思路来回答一下: 关于应用: 1.首先这个应用最基本的功能 ...

  10. OAF_JDBC系列2 - 通过JDBC连接SQLSERVER数据库DriverManager.getConnection

    d try{          Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");          St ...