强大的find和grep命令

悲哀,写这个的时候快写完了去上课,下课回来关闭了软件啥都没了,心塞塞,简单再写一遍吧

find 命令

命令行 man find 基本都在里面了

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
  • The -H, -L and -P options control the treatment of symbolic links.前面三个参数是关于链接文件的, 默认是-P( Never follow symbolic links),要用的时候再看说明吧
  • -D debugopts 调试选项,你发现find出现跟你想要的有结果有问题的时候用的
  • -Olevel 优化级别 默认1级

其实平常来讲,上面几个参数压根用不到,反正我没有用过

一般find命令可以简化为

find [path...] [expression]
  • path: 路径就不用说啦
  • expression:expression可以分为——“-options [-print -exec -ok …]”

    1. -options,指定find命令的常用选项,下节详细介绍
    2. -print,find命令将匹配的文件输出到标准输出
    3. -exec,find命令对匹配的文件执行该参数所给出的shell命令。

    如对当前目录下的所有普通文件执行file命令

    find . -type f -exec file ‘{}’ \;

    在普通文件里找出含有的include字符串

    find . -type f -exec grep ‘include’ ‘{}’ \;

    1. -ok,和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

删除4天内产生的所有log文件,删除前确认

find . -name “*.log” -mtime -4 -ok rm {} \;

find 常用选项

  • -name: 按照文件名查找文件.
  • -perm: 按照文件权限来查找文件。

    find . -perm 755 –print #在当前目录下查找文件权限位为755的文件

  • -prune: 不在当前指定的目录查找,使用-depth选项时被忽略

  • -user: 按照文件属主来查找文件。
  • -group: 按照文件所属的组来查找文件。
  • -mtime -n +n :按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示在n天以前
  • -nogroup: 查找无有效所属组的文件.即该文件所属的组在/etc/groups中不存在。
  • -nouser: 查找无有效属主的文件.即该文件的属主在/etc/passwd中不存在。
  • -newer file1 ! file2: 查找更改时间比文件file1新但比文件file2旧的文件。
  • -type: 查找某一类型的文件,
    b - 块设备文件。
    d - 目录。
    c - 字符设备文件。
    p - 管道文件。
    l - 符号链接文件。
    f - 普通文件。
  • -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。+100表示超过10个块
  • -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
  • -mount:在查找文件时不跨越文件系统mount点。
  • -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
  • -cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

find与xargs

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

一起使用的例子
查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

find . -type f -print | xargs file

在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:

find / -name “core” -print | xargs echo “” >/tmp/core.log

用grep命令在所有的普通文件中搜索hostname这个词

find . -type f -print | xargs grep “hostname”

删除3天以前的所有东西

find ./ -mtime +3 -print|xargs rm -f –r
find . -ctime +3 -exec rm -rf {} \;

删除文件大小为零的文件

find ./ -size 0 | xargs rm -f &

find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。

grep命令

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

SYNOPSIS
grep [OPTIONS] PATTERN [FILE…]
grep [OPTIONS] [-e PATTERN]… [-f FILE]… [FILE…]

具体使用看man吧,这里给几个例子
显示所有以d开头的文件中包含test的行

grep ‘test’ d*

通过管道过滤ls -l输出的内容,只显示以a开头的行

ls -l | grep ‘^a’

grep -i pattern files :不区分大小写地搜索。默认情况区分大小写
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

grep命令常用参数和正则表达式:
-I :忽略大小写
-c :打印匹配的行数
-l :从多个文件中查找包含匹配项
-v :查找不包含匹配项的行
-n:打印包含匹配项的行和行标

RE(正则表达式)
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配正则表达式的行开始
> 到匹配正则表达式的行结束
[ ] 单个字符;如[A] 即A符合要求
[ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
. 所有的单个字符

找出所有不是.c的文件

find . -type f |grep -v *.c

参考文献:
http://www.cnblogs.com/skynet/archive/2010/12/25/1916873.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值