十一加班实在蛋疼,上上网刷刷手机,内心已经按捺不住要回去打昆特牌的冲动了= =。。。思来想去还是装装逼好了,故归(chao)纳(hui)下(shu)find用法。
根据文件名查找应该是用的最多的,下面就是查找当前目录下后缀名为txt的文件。这里-print 加不加都无所谓
find . -name "*.txt" -print
如果是 -iname参数的话就是忽略大小写
多条件匹配,查找后缀名txt或者后缀名pdf的文件
find . \( -name ".txt" -o -name ".pdf" \) -print
根据文件路径来查询
就是说当前目录下有多个目录 查询子目录中包含目录nfs下的文件,像这样
[root@server01 lib]# pwd /var/lib [root@server01 lib]# find . -path "*/nfs/*" ./nfs/etab ./nfs/rmtab ./nfs/rpc_pipefs ./nfs/rpc_pipefs/gssd ./nfs/rpc_pipefs/gssd/clntXX ./nfs/rpc_pipefs/gssd/clntXX/gssd ./nfs/rpc_pipefs/gssd/clntXX/info ./nfs/rpc_pipefs/nfsd ./nfs/rpc_pipefs/cache ./nfs/rpc_pipefs/nfsd4_cb ./nfs/rpc_pipefs/statd ./nfs/rpc_pipefs/portmap ./nfs/rpc_pipefs/nfs ./nfs/rpc_pipefs/mount ./nfs/rpc_pipefs/lockd ./nfs/statd ./nfs/statd/sm ./nfs/statd/sm.bak ./nfs/state ./nfs/v4recovery ./nfs/xtab
然后-regex参数是使用正则表达式(这个我觉得是万能的),然后iregex也是指忽略大小写的意思,这里是查找后缀名为.py和.sh的文件
find . -regex ".*\(\.py\|\.sh\)$"
还有否定参数,匹配不以txt作为后缀名的文件
find . ! -name "*.txt" -print
这个很有用的主要是 -maxdepth 参数,根据最大目录深度
find . -maxdepth 1 -regex ".*\(\.py\|\.sh\)$"
目录深度为1 就是指当前目录,这个特别有用。
然后是-mindepth 最小目录深度,这个其实用的不多(好吧,我其实一次都没用到过= =),打印出目录深度至少为3的文件,当前目录的和下一级目录的可不会打印哦
find . -mindepth 3 -regex ".*\(\.py\|\.sh\)$"
这个用的相当多了
find . -type f -print
文件类型为文件
find . -type d -print
文件类型为目录
find . -type l -print
文件类型为符号链接
find . -type c -print
文件类型为字符设备
find . -type b -print
文件类型为块设备
find . -type s -print
文件类型为socket套接字
find . -type p -print
文件类型为FIFO(其实我tm不知道这是个啥东西)
文件的时间有三种
访问时间 -atime
修改时间 -mtime
变化时间 -ctime
单位是天,+表示大于 -表示小于 没符号表示等于
还有单位为分钟的
-amin
-mmin
-cmin
find . -type f -mmin -10 -print
打印当前目录下文件类型是文件 且修改时间在10分钟内的文件
find . -type f -size +2k
find . -type f -size +2k
find . -type f -size -2k
常用的单位有k M G
find . -type f -perm 644 -print
打印权限为 644 的文件
把查找出的文件替换权限
find . -type f -user root -exec chown hu {} \;
把查找出的文件重定向到新的文件
find . -type f -name "*.log" -exec cat {} \; >alllog.txt
把查找出的10天前的文件备份起来
find . -type f -mtime +10 -name "*.log" -exec cp {} BAK \;
跳过day目录下 查找后缀名为txt的文件然后统计行数再以一定规律排序
find . \( -name "day" -prune \) -o \( -name "*.txt" \) -type f -print0 |xargs -0 wc -l|sort -t"/" -k2 --n |grep -v total
删除查找到的文件
find . -type f -name "*.txt" -print0 |xargs -0 rm -rf
这里为啥是 -print0和xargs -0呢,因为很多文件名中可能会带有空格xargs会误以为是定界符,aa bb.txt 就会被当成 aa 和 bb.txt两个文件 -print0就是以字符null '\0'来分隔。xargs -0 将\0当作定界符
恩,好吧我承认了,以上用法都是抄书抄来的 。。。= =,不过确实除了常用的方法外,有些点一直记不住。乘着没啥事,写写博文,装装逼,快点回家可以浪了。。。。。
Cloudhu 个人随笔|built by django|
沪ICP备16019452号-1