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

 

One thought on “linux find命令”

  1. Currently it seems like BlogEngine is the preferred blogging platform available right now. (from what I’ve read) Is that what you are using on your blog?

Comments are closed.