注册 登录
LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! 返回首页

yw_zzy7186的个人空间 http://bbs.linuxtone.org/?11360 [收藏] [复制] [分享] [RSS]

日志

find 命令

热度 1已有 1576 次阅读2010-12-9 20:29 |个人分类:linux 命令|

GNU bash, version 3.2.25
记录下find命令自己没用到但重要的命令选项:
[root@PC_IN_LAN cmdfind]#ls -iLFR
.:
720989 dir2/  721004 test1.txt
./dir2:
721002 dir3/  721006 test2.txt
./dir2/dir3:
721003 dir4/  721008 test3.txt
./dir2/dir3/dir4:
721009 test4.txt
1.通过文件结点来查找某一个特定的文件使用-inum 选项
[root@PC_IN_LAN cmdfind]#find ./ -inum 721004 -print
./test1.txt
2.限定find命令查找的目录深度使用-mindepth(最小深度包括边界)-maxdepth(最大深度)
未限定时:
[root@PC_IN_LAN cmdfind]#find ./  -name "test[0-9].*" -print
./test1.txt
./dir2/test2.txt
./dir2/dir3/dir4/test4.txt
./dir2/dir3/test3.txt
限定在查到一级目录
[root@PC_IN_LAN cmdfind]#find ./  -maxdepth 1 -name "test[0-9].*" -print
./test1.txt
限定查到二级目录:
[root@PC_IN_LAN cmdfind]#find ./  -maxdepth 2 -name "test[0-9].*" -print
./test1.txt
./dir2/test2.txt
限定到三级目录:
[root@PC_IN_LAN cmdfind]#find ./  -maxdepth 3 -name "test[0-9].*" -print
./test1.txt
./dir2/test2.txt
./dir2/dir3/test3.txt
从二级目录到三级目录,忽略一级目录:
[root@PC_IN_LAN cmdfind]#find ./  -mindepth 2 -maxdepth 3 -name "test[0-9].*" -print
./dir2/test2.txt
./dir2/dir3/test3.txt
只在三级目录中:
[root@PC_IN_LAN cmdfind]#find ./  -mindepth 3 -maxdepth 3 -name "test[0-9].*" -print
./dir2/dir3/test3.txt
3.根据文件权限进行查找使用-perm 选项
[root@PC_IN_LAN cmdfind]#chmod og+w test1.txt
[root@PC_IN_LAN cmdfind]#chmod og+w dir2/dir3/dir4/test4.txt
[root@PC_IN_LAN cmdfind]#ll -FR
.:
总计 4
drwxr-xr-x 3 root root 4096 11-06 21:14 dir2/
-rw-rw-rw- 1 root root    0 11-06 21:14 test1.txt
./dir2:
总计 4
drwxr-xr-x 3 root root 4096 11-06 21:14 dir3/
-rw-r--r-- 1 root root    0 11-06 21:14 test2.txt
./dir2/dir3:
总计 4
drwxr-xr-x 2 root root 4096 11-06 21:15 dir4/
-rw-r--r-- 1 root root    0 11-06 21:14 test3.txt
./dir2/dir3/dir4:
总计 0
-rw-rw-rw- 1 root root 0 11-06 21:15 test4.txt
[root@PC_IN_LAN cmdfind]#find ./ -perm 666 -print
./test1.txt
./dir2/dir3/dir4/test4.txt
4.使用find查找文件的时候怎么避开某个文件目录
特别注意,如果-path 参数双引号不行,就用单引号试试。
然尽量要是绝对路径
比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件
find /usr/sam -path '/usr/sam/dir1' -prune -o -print
find [-path ..] [expression] 在路径列表的后面的是表达式
-path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o
-print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path '/usr/sam' 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path '/usr/sam' -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。
这个表达式组合特例可以用伪码写为
if -path '/usr/sam'  then
          -prune
else
          -print
避开多个文件夹
find /usr/sam \( -path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -print
圆括号表示表达式的结合。
\ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。
查找某一确定文件,-name等选项加在-o 之后
#find /usr/sam  \(-path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -name "temp" -print
[root@PC_IN_LAN cmdfind]#find ./ -path './dir2/dir3' -prune -o -print
./
./test1.txt
./inthreeday.file
./1011032237
./dir2
./dir2/linkfile
./dir2/test2.txt
./101103
./test
[root@PC_IN_LAN cmdfind]#find ./ \( -path ./dir2/dir3 -o -path ./dir2 \) -and -prune -o -print
./
./test1.txt
./inthreeday.file
./1011032237
./101103
./test
加上-follow 选项后当find遇到符号链接时就会追踪至源文件
[root@PC_IN_LAN ~]#mkdir linktest
[root@PC_IN_LAN ~]#cd linktest/
[root@PC_IN_LAN linktest]#touch testlink
[root@PC_IN_LAN linktest]#cd ..
[root@PC_IN_LAN ~]#ls
bashshell  cmdfind  cyuyan  linktest  storetest
[root@PC_IN_LAN ~]#ln -s /root/linktest/ /root/cmdfind/test
[root@PC_IN_LAN ~]#find /root/cmdfind/ -name "*link*"
/root/cmdfind/dir2/linkfile
[root@PC_IN_LAN ~]#find /root/cmdfind/ -name "*link*" -follow
/root/cmdfind/dir2/linkfile
/root/cmdfind/test/testlink
加上-depth 选项后在查找文件时首先在当前目录下查找,然后再去子目录中查找。
-ctime,-mtime,-atime的区别
-ctime 指文件的状态发生改变
-mtime 指文件的内容发生改变
-atime 指文件被访问
内容改变状态一定发生变化,状态变化内容不一定改变
参数-n n天之内,+n n天前,n 最后24*n
-cmin -mmin -amin 的区别就是时间单位是分钟
[root@PC_IN_LAN cmdfind]#touch -t 1011032237 inthreeday.file
用touch -t (这里要加-t 选项)
[root@PC_IN_LAN cmdfind]#ll
总计 8
-rw-r--r-- 1 root root    0 11-06 23:37 101103
-rw-r--r-- 1 root root    0 11-06 23:37 1011032237
drwxr-xr-x 3 root root 4096 11-06 22:17 dir2
-rw-r--r-- 1 root root    0 11-03 22:37 inthreeday.file
lrwxrwxrwx 1 root root   15 11-06 22:41 test -> /root/linktest/
-rw-rw-rw- 1 root root   14 11-06 22:37 test1.txt
[root@PC_IN_LAN cmdfind]#find . -mtime +2 -mtime -4 -type f -print
./inthreeday.file
通过指定文件大小来查找使用-size选项
[root@PC_IN_LAN cmdfind]#find . -type f  -size 14c
./test1.txt
默认是使用块为单位的1块为512B 可以在数字后面加上c来指定以B为单位。
+14c 表示大于14B -14c表示小于14B
最后一个选项就是-newer

路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 漂在北京 2010-12-14 22:28
    楼主继续写,关注你的博客

facelist

您需要登录后才可以评论 登录 | 注册

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2019-5-21 04:30 , Processed in 0.011159 second(s), 10 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部