linux find命令

find是linux中常用的文件和目录的查询命令,掌握它有利于提高工作和学习的效率.

find命令常用格式为

find pathname -options [-exec -ok …]

1. pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录,用~来表示当前用户根目录,或详细路径如:/var/www/, 表示在/var/www/下查找。

2. -options 用来过滤的一些选项,如用 -name可以按名字来查找, -user可以按照文件属主来查找文件, -group按照文件所属的组来查找文件。例如find . -name “abc*” 可以用来查找当前目录下所有以abc开头的文件,

3. -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ {} \;,注意{}和\;之间的空格。例如:find . -type f -exec ls -l {} \; 可把当前目录所有文件用ls命令列出来,显示的结果形如:                   [gene@localhost commandTest]$ find . -type f -exec ls -l {} \;
-rwxrwxrwx 1 root gene 14 Mar 5 21:22 ./abc.c
-rw-rw-r– 1 gene gene 21 Mar 5 21:23 ./abc-cope.c


4. -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。例如:                       
[gene@localhost commandTest]$ find . -type f -ok ls -l {} \;
< ls … ./abc.c > ? n
< ls … ./abc-cope.c > ? y
-rw-rw-r– 1 gene gene 21 Mar 5 21:23 ./abc-cope.c
-exec接受的参数不能够太长,如果find到的文件太多, 就会导致溢出错误,这时就可以用xargs来代替它。

5. xargs – build and execute command lines from standard input

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;

而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

来个例子:查看当前目录所有文件的属性                            [gene@localhost commandTest]$ find . | xargs file
.: directory
./abc.c: ASCII text
./abc-cope.c: ASCII text

 

开通博客

花了半天的时间, 终于把自己的个人博客开通了,开通的过程可谓是顺利而快速, 这不得不说是得益于开源工具的强大和主机供应商优良的服务。互联网已经发展成为了我们生活当中不可或缺的一部分,我也几乎每天都与网络有接触,但一直以来都是看别人的内容,很少在这个浩瀚的网络世界里留下点什么, 说来惭愧, 自己作为一个IT人, 却今天才在这个无限的空间里置得自己的这一亩三分地, 希望今后能够坚持下去,经营好这块田地,能够分享更多更好的东西给各位朋友!