Chinaunix首页 | 论坛 | 博客
  • 博客访问: 554061
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-23 13:53
个人简介

linux

文章分类

全部博文(66)

文章存档

2016年(1)

2015年(14)

2014年(32)

2013年(19)

分类: LINUX

2014-11-26 20:48:52

find命令:
1.常用执行方式:
    find start-dir expreesion
    解释:
    起始目录:指定find开始查找的目录,默认条件下,find会递归的查找指定目录下的所有子目录和文件;

    表达式:表达式通常由 选项、条件测试、动作三部分组成(三者都是可选的),
    如下面的命令中:
    $find ./project -depth -name '*.cpp' -exec cat {} > cppfile \;
    -depth是选项, -name '*.cpp' 是条件测试, -exec cat {} > cppfile \;是动作

2.find表达式:
    2.1表达式常用选项:
        -d、-depth:先找目录下的内容,然后是目录本身
        -maxdepth : 从指定目录最多往下找n层
        -mindepth <n>:从指定的目录至少往下找n层
        -prune:防止进入符合某个条件的目录
        -xdev、-mount:不要进入其它文件系统查找

    2.2find常用的条件表达式:
    2.2.1按文件名查找:
        -name pattern、-iname pattern:按指定的文件样式查找,-iname指不区分大小写

        #在当前目录查找以文件名sql结尾的文件
        $find . -name '*sql'
        #在/tmp /opt目录下查找以文件名为sock结尾的文件
        $find /tmp /opt -name '*sock'

    2.2.2按文件类型查找:
        -type filetype : 如
        #查找/var 下的socket文件
        $find /tmp -type s -ls

    2.2.3按时间查找:
    说明:
        数字n: n正好等于n, -n小于n, +n大于n
        a 访问时间、c 状态改变时间、 m修改时间
        -atime、 -ctime、 -mtime:单位为日
        -amin、 -cmin、 -mmin:单位为分钟
        -anewer file、 -cnewer file、 -newer file:时间比文件file新

        #查找最近50分钟内修改的文件
        $ find . -mmin -50

        #查找状态更改时间大于48小时的文件
        $ find . -ctime +2

        #查找比samp.sh文件新的文件
        $ find . -newer samp.sh

    2.2.4按文件大小查找
    文件的大小单位:
        b:以512bytes为单位的块
        c:字节
        w:双字节字符数
        k:1024bytes
        M:1024*1024 bytes
        G:1024 * 1024 * 1024 bytes

    示例:
        #查找文件尺寸大于1024k的文件
        $find . -size +2014k

        #查找文件尺寸小于2048 blocks的文件
        $ find . -size -2048

        #查找空文件
        $ find . -size 0 #或 find . -empty

    2.2.5按权限查询
        说明:
            权限匹配规则:以220为例:
            220:文件权限必须为220
            -220:文件权限最小为220, 如550,755都匹配
            /220:符合u,g,o三个权限中的任意一个都匹配, 200, 020等都会匹配, 但不匹配220

            数字形式与符号形式的权限表示:
            如:220->u+w, g+w
        示例:
            #以下3条命令一致, 查找所有者或组有写权限的文件
            $ find . -perm /220
            $ find . -perm /u+x, g+x
            $ find . /perm /u=x, g=w

    2.2.6按用户或组查询
    说明:
        可以使用户名, 组名或用户id、组id
        查无主的文件:nouser、nogroup
        查找可读或可写或可执行的文件:
        readable、writable、executable
        示例:
            #查找/tmp 下属于用户ppp的文件
            $ find /tmp -user ppp
            $ find /tmp -uid 1000

            #查找/tmp 下属于用户ppp, 且属于aaa的文件
            $ find /tmp -user ppp -group aaa

            #查找当前/opt 下的无主文件
            $ find /opt -nouser -o -nogroup # -o is or

            #查找当前目录下的可读文件
            $ find . -readable

    2.2.7表达式常见的动作:
        -print: 打印查找的结果
        -ls:相当于ls -l
        -exec command: 执行命令
        -ok command:同 -exec, 但开启交互模式
        -delete:删除查找的文件

            示例:
            #查找当前目录下所有后缀名为sql的文件,将其复制到f2目录下
            $ find . -name '*sql' -exec cp {} ./f2 \;

            #查找/opt下的无主文件,将其删除
            $ find /opt -nouser -o -nogroup -ok rm -rf {} \;

            #查找当期目录下所有后缀名为sql的文件,并执行ls -l
            $ find . -name '*.sql' -ls

3.配合xargs命令
    args命令:xargs通过管道,将前面的命令的输出组装成后一个命令的参数,如:
        #将ls命令的输出,作为echo命令的参数
        $ ls *.sql | xargs echo

    结合find 与xargs的示例:
        # 将当前目录下所有后缀名为cpp 的文件,打包
        $ find . name '*.cpp' 2>/dev/null | xargs tar cf sql.tar 2>/dev/null

        # 相同效果的另外一些做法,见“Shell 语法”单元
        $ tar cf sql.tar `find . name '*.sql' 2>/dev/null` 2>/dev/null
        $ tar cf sql.tar $(find . name '*.sql' 2>/dev/null) 2>/dev/null



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