QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1903|回复: 11

linux常用命令使用详解--find

[复制链接]
发表于 2003-12-10 11:50:57 | 显示全部楼层 |阅读模式
  find命令

  功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。

  语法:find 起始目录 寻找条件 操作

  说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。

  该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为:

  (1)and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找条件才算满足。例如:

  $ find –name ’tmp’ –xtype c -user ’inin’

  该命令寻找三个给定条件都满足的所有文件。

  (2)or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足。例如:

  $ find –name ’tmp’ –o –name ’mina*’
 
  该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。

  (3)not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。例如:

  $ find ! –name ’tmp’

  该命令查询文件名不是’tmp’的所有文件。

  需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“”来去除括号的意义。

  例:$ find (–name ’tmp’ –xtype c -user ’inin’ )

  寻找条件有以下选项:

  首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则:

  +20 表示20以后(21,22,23等)

  -20 表示20以前(19,18,17等)

  20 表示正好是20

  1. 以名称和文件属性查找。

  - name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。

  - lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、[ ]。

  -gid n 查找属于ID号为n的用户组的所有文件。

  -uid n 查找属于ID号为n的用户的所有文件。

  -group ’字串’ 查找属于用户组名为所给字串的所有的文件。

  -user ’字串’ 查找属于用户名为所给字串的所有的文件。

  -empty 查找大小为0的目录或文件。

  -path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。

  -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。

  -size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。

  -type x 查找类型为x的文件,x为下列字符之一:

  b 块设备文件

  c 字符设备文件

  d 目录文件

  p 命名管道(FIFO)

  f 普通文件

  l 符号链接文件(symbolic links)

  s socket文件

  -xtype x 与-type基本相同,但只查找符号链接文件。

  2. 以时间为条件查找

  - amin n 查找n分钟以前被访问过的所有文件。

  - atime n 查找n天以前被访问过的所有文件。

  - cmin n 查找n分钟以前文件状态被修改过的所有文件。

  - ctime n 查找n天以前文件状态被修改过的所有文件。

  - mmin n 查找n分钟以前文件内容被修改过的所有文件。

  - mtime n 查找n天以前文件内容被修改过的所有文件。

  3. 可执行的操作

  - exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“ ;”结束。

  - ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。

  - ls 详细列出所找到的所有文件。

  - fprintf 文件名 将找到的文件名写入指定文件。

  - print 在标准输出设备上显示查找出的文件名。

  - printf 格式 格式的写法请参考有关C语言的书。

  例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。

  $ find . - name ‘main*’ - exec more {} ;

  例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。

  $ find . (- name a.out - o - name ‘*.o’)

  > - atime +7 - exec rm {} ;

  说明如下:

  命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。(和)表示括号(),其中的“”称为转义符。之所以这样写是由于对Shell而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。“- name a.out”是指要查找名为a.out的文件;“- name ‘*.o’”是指要查找所有名字以 .o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件,find在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前(条件-atime +7),若是,则对该文件执行命令rm(- exec rm{ };)。其中{ }代表当前查到的符合条件的文件名,;则是语法所要求的。上述命令中第一行的最后一个是续行符。当命令太长而在一行写不下时,可输入一个,之后系统将显示一个>,指示用户继续输入命令。

  locate命令

  locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。

  该命令的一般形式为:

  locate 相关字

  例如:查找相关字issue

  $ locate issue

  /etc/issue

  /etc/issue.net

  /usr/man/man5/issue.5

  /usr/man/man5/issue.net.5
发表于 2003-12-12 12:52:47 | 显示全部楼层
辛苦了
回复

使用道具 举报

发表于 2003-12-12 13:14:36 | 显示全部楼层
chinahe,你应该专门开个帖子把你发的《linux常用命令使用详解》的各个部分做个连接。这样就方便了。 :-)
回复

使用道具 举报

 楼主| 发表于 2003-12-12 15:05:32 | 显示全部楼层
好的,等我整理完了,我会发个贴把所有的联接起来的:)
回复

使用道具 举报

发表于 2004-8-14 11:03:45 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2004-8-16 14:02:25 | 显示全部楼层
谢谢楼主的详解
回复

使用道具 举报

发表于 2004-11-6 09:56:32 | 显示全部楼层
例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。

  $ find . - name ‘main*’ - exec more {} ;

改为      $find . -name 'main*' -exec more {} \;

楼主的exec 和 ok 命令好象有点错误 ,
-exec  command {} \;     {} 和 \ 之间别望了空格最后还有分号.
-ok      command {} \;
回复

使用道具 举报

发表于 2004-11-6 18:43:42 | 显示全部楼层
very thanks for all of you!
回复

使用道具 举报

发表于 2004-11-7 22:02:53 | 显示全部楼层
例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。

  $ find . - name ‘main*’ - exec more {} ;

  例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。

  $ find . (- name a.out - o - name ‘*.o’)

  > - atime +7 - exec rm {} ;

这两个例子楼主测试过么?!
回复

使用道具 举报

发表于 2004-12-9 11:20:44 | 显示全部楼层
    
回复

使用道具 举报

发表于 2004-12-9 12:47:06 | 显示全部楼层
find ( –name ’tmp’ –xtype c -user ’inin’ )
应该为:
find  \(  -name  'tmp'  -and  -xtype c  -and  -user 'inin'  \)
注意\(的前后都要有空格,标点要全是西文的,-and可以省略。
回复

使用道具 举报

发表于 2004-12-14 23:54:21 | 显示全部楼层
好东西,我自己也有一点总结,发上来大家share一下....估计都差不多的...

[code:1]find命令常见使用方法:
查找名字为conf的目录
#find /目录  -type  d -name conf
注意type可能为b,c,d,l等...
查找文件权限为755的文件
#find /目录 -perm 755 -print
如果用八进制,则可以用
#find /目录 -perm -007 -print  (跟chmod里的表示方法相同)
查找文件属主为kt的文件
#find /目录 -user kt -print
查找group为kt的文件
#find /目录 -group kt -print
查找名字为file的文件
#find /目录 -name file
查找大小为0的文件
#find /目录 -size 0
忽略某个目录:
#find /目录 -name "/目录名" -prune -o -print
查找属主帐户已经被删除的文件:
#find /目录 -nouser -print
按更改时间查找文件
#find /目录 -mtime -5 -print  单位是5,查找更改时间在5日以内的文件
查找更改时间在3日以内的文件
#find /目录 -mtime +3 -print
查找更改时间比file1新但比file2旧的文件
#find /目录 file1 ! -newer file2 -exec ls -l {} \;
不仅查询根目录,而且查询子目录
#find /目录 -name file -depth -print
只在当前文件系统内部查询,而不进入其他文件系统
#find /目录 -name file -mount -print
用exec对查找出的文件进行操作
#find /目录 -type f -exec ls -l {} \;     //-exec ls -l {} \;则表示执行“ls -l”的操作.
用exec安全模式,在删除前有提示
#find /目录 -name "*.log" -mtime +5 -ok rm {} \;   //这样在删除文件前会先提示
根据inode号来取得硬链接
#find /目录 -inum inode号[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 15:55 , Processed in 0.087670 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表