Chinaunix首页 | 论坛 | 博客
  • 博客访问: 225695
  • 博文数量: 41
  • 博客积分: 1470
  • 博客等级: 准尉
  • 技术积分: 370
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-25 11:15
文章分类

全部博文(41)

文章存档

2011年(41)

分类:

2011-05-06 08:25:07

原文地址:例解find 作者:xiaozhenggang

find:用来查找具有某些特征(时间,大小,类型...)的文件的命令,可遍历当前目录甚至整个文件系统来查找某些文件或目录。查找大型文件系统时比较耗时,建议放到后台执行

find命令的一般形式:
find pathname -options [-print -exec -ok]
其中:
pathname find命令所查找的路径。如用.表示当前路径,/表示根目录,也可以用`pwd`表示当前工作目录,等等
-print find命令将匹配的文件输出到标准输出
-exec find命令对匹配的文件执行该参数给出的shell命令,相应的命令形式为'command{} \;';{}与\;之间有空格。
-ok 和-exec作用相同,只不过-ok以一种更安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前都会给出提示,让用户来决定是否执行。
 
find命令的一些常用选项:
-name 按文件名查找
-perm 按文件权限查找
-user 按文件属主查找
-group 按文件属组查找
-mtime -n +n 按文件的更改时间查找。-n表示文件更改时间在n天以内,+n表示文件更改时间在距现在n天以前。还有类似的-atime(access time)和-ctime(create time)选项
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计 
-nogroup 查找无有效属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 !file2 查找更改时间早于file1且晚于file2的文件
-type 查找某一类型的文件,如:
       b-块设备文件
       d-目录
       c-字符设备文件
       p-管道文件
       l-符号链接文件
       f-普通文件
*更多信息请 man find

find命令举例:
1.使用name选项:可以使用某种文件名模式来匹配文件,但要用双引号将文件名模式括起来:
e.g1:默认当前路径
[fedora@novice ~]$ find -name "*.txt" -print
./Desktop/shell.txt
./Desktop/router-fireware.txt
./Desktop/find.txt
./Desktop/YUM.txt
./Desktop/Network File System.txt
./Desktop/Network_Information_servers.txt
./Desktop/个人简历.txt
./.pki/nssdb/pkcs11.txt
./.adobe/Flash_Player/AssetCache/DQXNCZNS/cacheSize.txt
./.openoffice.org/3/user/uno_packages/cache/log.txt
./.mozilla/firefox/p9q7d5x2.default/urlclassifierkey3.txt

e.g2:指定路径为当前路径,结果与e.g 1 完全一样。
[fedora@novice ~]$ find ./ -name "*.txt" -print
./Desktop/shell.txt
./Desktop/router-fireware.txt
./Desktop/find.txt
./Desktop/YUM.txt
./Desktop/Network File System.txt
./Desktop/Network_Information_servers.txt
./Desktop/个人简历.txt
./.pki/nssdb/pkcs11.txt
./.adobe/Flash_Player/AssetCache/DQXNCZNS/cacheSize.txt
./.openoffice.org/3/user/uno_packages/cache/log.txt
./.mozilla/firefox/p9q7d5x2.default/urlclassifierkey3.txt

e.g 3:查找以大写字母开头的所有文件
[fedora@novice ~]$ find ./ -name "[A-Z]*" -print
./.gconf/apps/nautilus/desktop-metadata/CentOS_5@46@6_Final@46@volume
./.gconf/apps/nautilus/desktop-metadata/D@46@volume
./.gconf/apps/nautilus/desktop-metadata/G@46@volume
./.gconf/apps/gnome-terminal/profiles/Default
./.gconf/desktop/ibus/engine/Bopomofo
./.gconf/desktop/ibus/engine/Table
./.gconf/desktop/ibus/engine/Table/WuBiJidian86
./.gconf/desktop/ibus/engine/Pinyin
./Desktop
./Desktop/YUM.txt
./Desktop/SHELL
......

2.使用perm选项:
e.g 4:查找当前目录下权限为755的文件
[fedora@novice ~]$ find -perm 755|head -n 3
./Desktop
./Downloads
./Music
#有兴趣的话可以用ls -al查看一下
另:如下,会得到不一样的结果。至于为什么请 man find,嘿嘿
[fedora@novice ~]$ find -perm -755|head -n 3
./Desktop
./Desktop/[Linux服务器配置全程实录].张勤,杨章明.扫描版.pdf
./Desktop/SHELL

3. 使用user及nouser选项:
e.g 5:在当前工作目录下查找属于root的文件
#没有属于root的文件
[fedora@novice ~]$ find `pwd` -user root 
#改成fedora,因为文件太多通过管道使用tail过滤
[fedora@novice ~]$ find `pwd` -user fedora | tail 
/home/fedora/.mozilla/firefox/p9q7d5x2.default/extensions
/home/fedora/.mozilla/firefox/p9q7d5x2.default/places.sqlite-journal
/home/fedora/.mozilla/firefox/p9q7d5x2.default/XUL.mfasl
......

e.g 6:查找无有效属主的文件:
#当前目录下不存在无有效属主的文件。可用这个方法查找系统中存在的一些垃圾文件。
[fedora@novice ~]$ find . -nouser  
[fedora@novice ~]$ 

4.使用group和nogroup选项:
e.g 7:查找属主为fedora的文件
[fedora@novice ~]$ find  -group fedora |tail -n 3
./Public
./.gtk-bookmarks
./shell_scripts

e.g 8:查找无有效属组的文件:
#当前目录下不存在无有效属组的文件。可用这个方法查找系统中存在的一些垃圾文件。
[fedora@novice ~]$ find . -nouser  
[fedora@novice ~]$ 

5.使用-mtime选项
e.g 9:查找/var目录下一天内更改过的文件
[root@novice ~]# find /var -mtime -1 | tail -n 3
/var/run/avahi-daemon
/var/run/avahi-daemon/pid
/var/run/avahi-daemon/socket

e.g 10:查找/var目录下更改时间距现在一天的文件
[root@novice ~]# find /var -mtime +1 | tail -n 3
/var/www/error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
/var/account
/var/account/pacct

6.查找比某个文件新或旧的文件
e.g 11:
[fedora@novice Desktop]$ find /home/fedora/Desktop/ -newer "YUM.txt" ! -newer "find.txt"
/home/fedora/Desktop/http_imgload.cgi
/home/fedora/Desktop/find.txt
......
/home/fedora/Desktop/Network_Information_servers.txt
/home/fedora/Desktop/个人简历.txt

7.使用type选项:
e.g 12:
[fedora@novice Desktop]$ find  -type d
.
./SHELL
./DB
./bash shell image
./bash shell image/正则表达式

8.使用size选项:
e.g13:查找大于10000000字节的文件
[fedora@novice Desktop]$ find -size +10000000c 
./[Linux服务器配置全程实录].张勤,杨章明.扫描版.pdf
./SHELL/第二章.变量和运算符.AVI
./SHELL/高级编程技巧第四章几个例子的分析.AVI
./SHELL/第七章.向脚本传递参数.AVI
./SHELL/第三章.shell输入与输出.AVI
./SHELL/高级编程技巧第一章深入讨论.avi
./SHELL/第五章.文本过滤.avi
./LINUX系统管理技术手册(第2版).pdf

e.g 14:查找大于100000个块的文件
[fedora@novice Desktop]$ find -size +100000
./[Linux服务器配置全程实录].张勤,杨章明.扫描版.pdf
./SHELL/第二章.变量和运算符.AVI
./SHELL/高级编程技巧第四章几个例子的分析.AVI
./SHELL/第七章.向脚本传递参数.AVI
./SHELL/第三章.shell输入与输出.AVI
./SHELL/高级编程技巧第一章深入讨论.avi
./SHELL/第五章.文本过滤.avi
./LINUX系统管理技术手册(第2版).pdf

9.使用depth选项:先匹配所有的文件再在子目录中查找
e.g 15:
[fedora@novice Desktop]$ find ./ -name "*.pdf" -depth -print
find: warning: you have specified the -depth option after a non-option argument -name, but options are not positional (-depth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.
#上面的警告信息一直没弄明白
......
./[Linux服务器配置全程实录].张勤,杨章明.扫描版.pdf
./LINUX系统管理技术手册(第2版).pdf
......

10.使用exec或ok
e.g 16:查找一般文件,并执行ls命令.使用 exec选项
[fedora@novice ~]$ find ./ -type f -exec ls -l {} \;|tail -n 3
-rw-r--r--. 1 fedora fedora 7168 Apr 23 11:37 ./.mozilla/firefox/p9q7d5x2.default/content-prefs.sqlite
-rw-rw-r--. 1 fedora fedora 150923 Apr 23 11:37 ./.mozilla/firefox/p9q7d5x2.default/compreg.dat
-rw-rw-r-- 1 fedora fedora 142 May  5 16:30 ./.gtk-bookmarks

e.g 17:使用ok选项
[fedora@novice ~]$ find /home/fedora/Desktop/SHELL/ -type f -ok ls -l {} \;
< ls ... /home/fedora/Desktop/SHELL/第四章.控制流结构.wmv > ? y
-rwx------ 1 fedora fedora 5555749 May  1 09:40 /home/fedora/Desktop/SHELL/第四章.控制流结构.wmv
......
< ls ... /home/fedora/Desktop/SHELL/第一章.Linux.Shell.简介.wmv > ? y
-rwx------ 1 fedora fedora 6917187 May  1 09:37 /home/fedora/Desktop/SHELL/第一章.Linux.Shell.简介.wmv

11.使用xargs选项:在使用find命令的-exec选项处理匹配到的文件时,find会命令将所有匹配到的文件传给exec。然而有些系统对exec能接受的参数长度有限制,这样在find命令运行到一定时间后会出现溢出错误;而xargs不会。在与find命令一起使用时,exec会发起多个进程,而xargs只有一个。
e.g 18:
[fedora@novice ~]$ find -perm 755|head -n 3
./Desktop
./Downloads
./Music
[fedora@novice ~]$ find -name "test"|xargs cat test
kkkkk
kkkkk
kkkkk
kkkkk

*find命令的功能非常强大,上面只是粗略地介绍了一些。关于更多更详细的find用法,请参照man手册。

阅读(1689) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~