Find命令教程

find可以用来查找old big unused文件,也可以用来查找那些你忘记丢在哪的文件。还有很重要的一点,find能够查找子目录,并一直找下去。ls命令是办不到的。


其他命令存在的一些问题
一般shell命令后面都可以带参数列表,而且后面经常跟的是文件名而不是目录,只有一部分命令能够带上目录并进入子目录,比如find tar du diff。chmod chgrp rm cp也可以,只是后面还要加上-r或-R选项。
所以,对于那些后面不带目录的命令,你可以这样使用:
rm *.o */*.o */*/*.o
这样不仅很丑,而且无法保证找到你想找的文件。上面这种形式匹配不到以“.”(点号)开头的文件,而且*/*/*/*.o也删不掉。另外,有时候会碰到“arguments too long”的错误,意思是你后面带的参数列表太长啦!
对于这些问题,可以用find来解决。


一个简单的例子
find . -print  列出当前目录下所有文件,包括子目录。find的第一个参数是目录或者文件名,在这之后的参数一般都已“-”(减号)开始,它会告诉find这次该怎么做。这就是所谓的搜索选项。在上面这个例子中,找到的文件被列出来。理论上你可以指定N多个目录,你也可以用~来指定家目录。
find ~ ~barnett /usr/local -print
如果你时间多的流油,也可以输入下面的命令,放心,它会运行好久好久
find / -print
find还能找出.和..这两个文件,但是它并没有这样做。


和其他的命令一起使用
find把结果送给标准输出,也就是屏幕。我们可以利用反引号来配合ls一起使用。
ls -ld `find . -print`
ls能够利用find的结果,但是它甚至意识不到find的存在。


使用xargs
xargs和find是完美搭档。下面两条命令是有区别的:
ls -ld `find / -print`
find /  -print |xargs ls -ld
第一条很可能会报错,因为ls的参数是有长度限制的。而xargs能够很好地处理这个问题。


你可以按名称查找特定的文件
find . -name *.o -print
find . -name '*.o' -print
find . -name '[a-zA-Z]*.o' -print


按文件类型查找
-type
b block special file
c character special file
d directory
f plain file
p named pipe file
l symbolic link
s socket
其中d f l是最常用的,剩下的就交给系统管理员吧。如果你i想递归列出文件,而不是目录,那么可以这样做:
find . -type f -print|xargs ls -l
下面这条就更厉害啦,可以列出所有链接,而且把链接源头给找出来呈现给你。
find .type l -print | xargs ls -ld | awk '{print $10}'


通过size来查找
find的一些选项能够使用integer(整数),-size就是其中之一。
find . -maxdepth 1 -type f -size +10M | xargs ls -hl


查找旧文件
如果你想找7天以前的文件,-mtime能派上用场。
find . -mtime 7 -print
你也可以列出一个范围
find . -mtime +6 -mtime -8 -print
Mtime是文件最后修改(modified)的时间.atime代表access time。你很难找到没有access的文件,以为find本身就会修改文件的atime。ctime代表文件状态的改变,比如owner group permission,还有链接数等。当然,如果你想通过链接数来指定查找,-links N会是个不错的选择哦。


通过权限查找(我都还没用过呢)
权限可以用八进制数字来表示,比如
find . -name *.o -perm 664 -print
find . -type d -perm 777 -print


owner group
find . -user root -perm -4000 -print
find . -group staff -perm -2000 -print
如果一个用户或组在系统中已经不存在了,-nouser -nogroup就能用。


find 和cpio
find . -depth -cpio >/dev/rmt0
find . -depth -ncpio >/dev/rmt0
find . -depth -print | cpio -oB >/dev/rmt0
find . -depth -print | cpio -ocB >/dev/rmt0
上面的还没研究过,主要是cpio不懂,回头看看。


文件比对
find /usr -newer /usr/FirstFile -print
/usr/FirstFile用来作为比较的基准


find还能用! -o -a
find /usr ! -newer /usr/FirstFile -print
find . (-name a.out -o -name *.o) -print


别让find走的太远
find * -type f -print -o -type d -prune
prune使得find不会查找子目录


让查找更快
用cron程序每天执行updatedb

转载于:https://my.oschina.net/csensix/blog/134999

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值