Linux命令学习手册-find命令_第1页
Linux命令学习手册-find命令_第2页
Linux命令学习手册-find命令_第3页
Linux命令学习手册-find命令_第4页
Linux命令学习手册-find命令_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、find pathname -options -print -exec -ok .【功能】find用于查找符合某些特性的文件。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。【举例】*按名称*在当前目录中查找任何扩展名为“.c”的文件:$find ./ -name '*.c' 或$find ./ -name *.c或$find -name '*.c'输入之后,输出如下:./hello.c./1/main.c./1/hello.

2、c./hello2.c这里,当前目录只用"."也行,如果不用转义,*.c必须括在引号(单/双)当中,如果不指定路径,将在当前目录找;默认把子目录下的也都找出来了。*到 ./test、./viStudy目录查找所有 .c 文件:$find test viStudy/ -name '*.c'输入之后,输出如下:test/test_out_direct.cviStudy/hello.cviStudy/1/main.cviStudy/1/hello.cviStudy/hello2.c这里,如果您没有相应的权限,您在开始浏览许多目录时将生成错误消息例如如下的提示:fi

3、nd: /tmp/orbit-root: Permission denied可以不让错误输出,防止混乱:$find /usr /home /tmp -name "*.jar" 2>/dev/null*不区分大小写的 find查找:$find downloads -iname '*.gif'输入之后,输出如下:downloads/.xvpics/Calendar05_enlarged.gifdownloads/lcmgcfexsmall.GIF这里,默认情况下,find 是区分大小写的。对于不区分大小写的 find,将 -iname 测试替换为 -nam

4、e 。*列出当前目录和所有子目录中的所有文件(包括隐藏文件)的完整清单:$find 或$find .或$find . -print输入之后,输出如下:./any./tags./hello.c./1./1/main.c.省略.*按类型*查找某(当前)目录中的所有子目录:$find . -type d或find -type d输入之后,输出如下:./1*查找某(当前)目录中的所有符号链接:$find . -type l输入之后输出如下:./hello2s这里,./hello2s是一个软链接,这个命令显示的也是软链接。其他 find 可以找到的文件类型包括:b 块(缓存)特殊c 字符(未缓存)特殊p

5、 命名管道 (FIFO)s 套接字 用ls列出软链接需要用-ls,用管道不行。如下:$find . type l -ls输出:56231215 0 lrwxrwxrwx 1 quietheart member 6 May 16 16:14 ./hello2s -> hello2*从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:$ find . -name "*.XC" -mount -print这里,在当前的文件系统中查找文件(不进入其他文件系统),使用了find命令的mount选项。*告知 find 在指定文件系统(例如vfat)中查找:$find / -

6、name "*.txt" -fstype vfat还有find / -name "*.txt" -mount 2等等,不常用就不多说了。*按时间*查找在最近 1 *24小时内修改的所有文件:$find . -mtime -1输入之后输出如下:./plsql/FORALLSample./plsql/RegExpDNASample/plsql/RegExpSample*查找恰好在 1 *24小时以前修改的所有文件:$find . -mtime 1*查找 1 *24个多小时以前修改的所有文件: $find . -mtime +1 这里,find根据系统的时间戳

7、搜索文件的选项。这些时间戳包括:mtime 文件内容上次修改时间 atime 文件被读取或访问的时间ctime 文件状态变化时间这里,ctime 则需要更多的解释。由于 inode 维护着每个文件上的元数据,因此,如果与文件有关的元数据发生变化,则 inode 数据也将变化。这可能是由一系列操作引起的,包括创建到文件的符号链接、更改文件权限或移动了文件等。由于在这些情况下,文件内容不会被读取或修改,因此 mtime 和 atime 不会改变,但 ctime 将发生变化。这些时间选项都需要与一个值 n 结合使用,指定为 -n、n 或 +n:-n 返回项小于 n +n 返回项大于 n n 返回项正

8、好与 n 相等*查找在不到 1 分钟以前读取的所有文件:$find . -amin -1输入之后,输出如下:./.bashrc/.bash_history./.xauthj5FCx1这里是刚刚登陆系统就运行了这个命令,所以输出这样。默认情况下,-mtime、-atime 和 -ctime 指的是最近 24 小时。但是,如果它们前面加上了开始时间选项,则 24 小时的周期将从当日的开始时间算起。您还可以使用 mmin、amin 和 cmin 查找在不到 1 小时的时间内变化了的时间戳。 应该注意的是,使用 find 命令查找文件本身将更改该文件的访问时间作为其元数据的一部分。*查找在当前目录中h

9、ello2.c文件之后被编辑过的所有文件:$find . -newer hello2.c输入之后输出如下:./hello2s./hello2h./hello2这里,需要注意硬链接的特殊性(我不说,只有你明白了才知道我说的意思)。使用 -newer、-anewer 和 cnewer 选项与特定的文件比较查找已修改或访问过的文件。这类似于 -mtime、-atime 和 ctime。 -newer 指内容最近被修改的文件-anewer 指最近被读取过的文件-cnewer 指状态最近发生变化的文件*查找更改时间比文件httpd1.conf新但比文件temp旧的文件:$find -newer http

10、d1.conf ! -newer temp -ls其中,!是逻辑非符号。*按大小*查找所有大于 5MB 的用户文件:$find / -size +5000000c 2> /dev/null输入之后,输出如下:/var/log/lastlog/var/log/cups/access_log.4/var/spool/mail/bluher这里,把错误的信息定位到/dev/null了。结尾的“c”以字节为单位报告我们的结果。默认情况下,find 以 512 字节块的数量报告大小。如果我们将“c”替换为“k”,我们还会看到以千字节的数量报告的结果,如果使用“w”,则会看到以两字节字的数量报告的结

11、果。*在当前目录下查找长度超过10块的文件(一块等于512字节): $ find . -size +10 -print*搜索所有零字节文件并将它们移至 /tmp/zerobyte 文件夹:$find test -type f -size 0 -exec mv /tmp/zerobyte ;这里,-exec 操作允许 find 在它遇到的文件上执行任何 shell 命令。在本文的后面部分,您将看到其用法的更多示例。大括号允许移动每个空文件。*查找test目录下的空文件:$find test -empty 输入之后输出如下:test/footest/test查找空文件用的是-empty选项。*按权

12、限、所属*在当前目录下查找文件权限位为755的文件:$ find . -perm 755 -print还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666.*查找属于user1name或着属于user2name的文件:$find / -user user1name -or -user user2name*查找既属于user1name又属于user2name用户的文件:$find / -user user1name -and -user2name*查找在系统中属于非用户(?)的文件:$find /nouser*查找在系统中属于usernam

13、e的文件:$find / -user username *查找在系统中属于groupname的文件:$find / -group groupname *按指定目录*希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找:$ find /apps -path "/apps/bin" -prune -o -print在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。*在/usr/sam目录下查找不在dir1子目录之内的所有文件:$find /usr/sam -path "/usr/sam/

14、dir1" -prune -o -print 这里,find -path . expression 在路径列表的后面的是表达式,-path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o-print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 | 类似如果 -path "/usr/sam" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达

15、式为假。如果 -path "/usr/sam" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。这个表达式组合特例可以用伪码写为if -path "/usr/sam" then -pruneelse -print*避开多个文件夹:find /usr/sam ( -path /usr/sam/dir1 -o -path /usr/sam/file1 ) -prune -o -print这里,圆括号表示表达式的结合。 表示引用,即指示 shell 不对后面的字符作特殊解释,而

16、留给 find 命令去解释其意义。*确保先在一个目录中进行查找,然后才在其子目录中进行查找:$find -name "*test*" -depth输入之后,输出:./test/test./test./localbin/test./localbin/test_shell_var./localbin/test.txt./test2/test/test./test2/test./test2*让 find 在至少下至目录树三个级别的目录中查找:$find / -mindepth 3 -name "*log"*在目录树的前三个级别中查找日志文件:$find / -

17、maxdepth 3 -name "*log"*查找并执行命令:*用ls -l命令列出所匹配到的文件:$ find . -type f -exec ls -l ;输入之后,输出:-rw-r-r- 1 root root 34928 2003-02-25 ./conf/httpd.conf-rw-r-r- 1 root root 12959 2003-02-25 ./conf/magic-rw-r-r- 1 root root 180 2003-02-25 ./conf.d/README这里,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿,一个空格和一个,最后是一个

18、分号,注意内可以没有空格,但是后面、前面要有一个空格。*在/logs目录中查找更改时间在5日以前的文件并删除它们:$ find logs -type f -mtime +5 -exec rm ;在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。*当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件并删除,删除之前先给提示:$ find . -name "*.conf" -mtime +5 -ok rm ;输入之后,输出如下提示:< rm . ./conf/httpd.con

19、f > ? n这里,按y键删除文件,按n键不删除。*匹配所有文件名为“ passwd*”的文件,然后执行grep命令看这些文件中是否存在sam用户:$find /etc -name "passwd*" -exec grep "sam" ;输入之后,输出:sam:x:501:501:/usr/sam:/bin/bash*当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:$ find . -type f -perm 644 -exec ls -l ;*查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前

20、询问它们:$ find /var/logs -type f -mtime +7 -ok rm ;*查找系统中所有属于root组的文件:$find . -group root -exec ls -l ;输入之后,输出:-rw-r-r- 1 root root 595 10月 31 01:09 ./fie1这里实际不用-exec也行,即:$find . -group root。不过为了更详细列出相关的信息,使用exec选项对每个文件执行了ls。*查找并删除访问时间在7日以来、含有数字后缀的admin.log文件:$ find . -name "admin.log0-90-90-9&quo

21、t; -atime -7 -ok rm ;输入之后,输出:< rm . ./admin.log001 > ? n< rm . ./admin.log002 > ? n< rm . ./admin.log042 > ? n< rm . ./admin.log942 > ? n这里,只寻找了3位数的数字。*高效的查找执行:使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误;还可能导致有些系统进程过

22、多,系统性能下降的问题,因而效率不高.使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。xargs命令同find命令一起使用的一些例子:*查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件:$find . -type f -print | xargs file输入之后,输出:./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text./.kde/Autostart/.dir

23、ectory: ISO-8859 text.省略.*当前目录下查找"file"开头的文件然后把结果保存到/tmp/core.log 文件中:$find . -name "file*" -print | xargs echo "" > /temp/core.log*在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:$find . -perm -7 -print | xargs chmod o-w*用grep命令在当前目录下的所有的普通文件中搜索hostname这个词:$find . -type f -prin

24、t | xargs grep "hostname"或$find . -name * -type f -print | xargs grep "hostname"输入之后,输出:./httpd1.conf:# different IP addresses or hostnames and have them handled by the./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames on your注意,这里, 用来取消find命令中的*在shel

25、l中的特殊含义。*【描述】1)find命令的参数;find 的所有参数均为可选pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。-print: find命令将匹配的文件输出到标准输出。-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' ;,注意 和;之间的空格。-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。2)find命令选项-name 按照文件名查找文件。-perm 按照文件权限来查找文件。-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。-user 按照文件属主来查找文件。-group 按照文件所属的组来查找文件。-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。-nouser 查找无有效属主的文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论