find 其实是一个很有用的工具,且常用的工具。
◎find - walk a file hierarchy
在一个档案等级制度中游走 顾名思义 也就是搜寻
◎语法: find path operators
path:路径 operators:运算子(参数)
◎operators: 常用的参数如下 (若有疑义请参阅man page 为准
★号表示重要...
1. -atime n: 用档案存取时间(access)为搜寻条件,n 为数字代表期,
单位是24小时。
★解: n不带正负时,表示距今从目前这个期到下个期为止
n为负号时(-),表示距今这个期之前。
n为正号时(+),表示距今大於这个期的时间。
举例说明:
若n为3(不带正负号),表示距今72~96小时。
若n为-3(带负号),表示距今0~72小时内。
若n为+3(带正号),表示距今超过72小时,也就是>72小时。
2.-mtime n: 用档案修改时间(modification)为搜寻条件,n以24小时为期。
3.-ctime n: 用档案inode更动时间为条件,n以24小时为期。
4.-inum n: 用inode值来作为搜寻条件,n为该档案的inode值。
5.-name filename:後接档案名称,若包含"万用字元",则要括起来,
避免shell解读之。
6.-perm mode: 以存取权限为搜寻条件。
7.-user name: 以档案的所有者为搜寻条件,用uid也可。
8.-group name: 以档案的群组为搜寻条件,用gid亦可。
:7.8 find会先用name搜寻,若找不到才试着用uid或gid搜寻
9.-type t: t的代表的是档案的类型,类型常用的如下:
d --> 资料夹
f --> 一般档案
l --> 符号连结档
10.-size n: n表示区块数,通常是512-byte bolck,
若n後接c (nc) 表示为n bytes。
★11.operator1 -a operator2: -a 等同於逻辑上的 and
operator1 -o operator2: -o 等同於逻辑上的 or
! operator1 : ! 等同於逻辑上的 not
:operator1 -a operator2 与operator1 operator2
是相同的...同样代表当运算子1成立且运算子2成立
★12.\( expression \): 在杂的情况下,括号表示先运算。
加上反斜线\ 为的是不要让shell误判。
13.-print: 将搜寻结果送到标准输出stdout,一般来说也就是萤幕。
:最常用到 但也常被遗忘的参数。
★14.-exec command: 表示将搜寻的结果,再导入某一命令。
:搜寻出的结果可用两个大括号{} 替代,命令後接 \; 表示结束。
ex:将目前目录 搜寻出档案以.o结尾的档案 删除!!
find . -name "*.o" -exec rm -f {} \;
★15.-maxdepth n: n 表示搜寻的深度。1表示目前这个资料夹。
★16.-ok command: -ok跟-exec相同,不过执行前会询问。通常用来测试。
★17.-newer file: 比file修改(modification)的时间更早为搜寻条件
◎实例应用:
1.修改时间: 假设是此目录 7天前(当天)修改过的档案
find . -mtime 7 -print
find . -mtime +6 -mtime -8 -print
2.档案大小: 档案介於於1000byte到32000byte之间
find . -size +1000c -size -32000c -print
★3.删除某些诡异的档案: 某些档案因含有特殊字元而无法删除,
find . -inum 31246 -exec rm -rf {} \;
:31246为其inode值,可用ls -i 察看..
★4.以精确的时间搜寻:搜寻2001年5月28日11时59分到2001年5月29日0时10分间所有的档案
a. touch -t 200105281159 file1
b. touch -t 200105290010 file2
c. fine . -newer file1 ! -newer file2 -print
如此就会搜寻出数个档案 扣除file2的就是所得...
★5.将档案更名:把搜寻出来的更名为
find . -maxdepth 1 -name "*.o" -exec mv {} {}.orig
将档名符合*.o的档案名称附加上.orig
★解:若您第五个无法执行的话也可以这样做:
$find . -maxdepth 1 -name "*.o"
> while read file
> do mv "$file" "$file".orig
> done
> 乃是换行後自动出现的提示符号...
◎重要观念:
★1.搜寻参数 都是find懂的常规表示法,若表示法为真,就执行一些设定好的动作。
★2.括号中的先运算: -atime +5 \( -name "*.o" -o -name "*.tmp" \)
表示搜寻 存取时间大於5天 且(名称为*.o或是*.tmp)的档案
3.规则式中两个运算子间若用空白隔开表示 -a 也就是and
★4.find任务就是判定整个运算式,而不是找到档案,
当然,会找到档案,但那只是一个副作用。
5.量不要搜寻nfs档案,因为万一nfs server 挂了,会让整个搜寻停顿。
可以用-maxdepth 或 -prune 限制
◎困难排除:
★xargs的使用: 有时您会遇到向下面这种情况...语法无误 但却无法显示
find / -print ls -al 显示根目录下的所有档案
系统会直接出现broken pine 然後就结束了...
或是出现too many argument ..则表示输出超出指令列上的长度。
这时就要用到xargs了...整个命令列如下
find / -print xargs ls -al
结果就会很顺利的出现..因为xargs将输入一个一个依序输出,
而非一次全部。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器