Find命令总结

回复 收藏

find命令:

    用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法:

    find [路径] [选项]

常用选项:

  • -amin<分钟>:查找在指定时间曾被存取过的文件或目录,以分钟为单位计算

  • -atime<天>:查找在指定时间曾被存取过的文件或目录,以24小时(天)为单位计算

  • -cmin<分钟>:查找在指定时间之时被更改过的文件或目录,以分钟为单位计算

  • -ctime<天>:查找在指定时间之时被更改的文件或目录,以24小时(天)为单位计算

  • -mmin<分钟>:查找在指定时间曾被更改过的文件或目录,以分钟为单位计算

  • -mtime<天>:查找在指定时间曾被更改过的文件或目录,以24小时(天)为单位计算

  • -depth:从指定目录下最深层的子目录开始查找

  • -maxdepth<目录层级>:设置最大目录层级

  • -mindepth<目录层级>:设置最小目录层级

  • -name<名称>:指定字符串(文件名/目录名)寻找文件或目录;(-iname忽略大小写)

  • -path<范本样式>:指定字符串作为寻找目录的范本样式;(-ipath忽略大小写)

  • -newer<参考文件或目录>:查找其更改时间比指定文件或目录的更改时间要新的文件或目录

  • -perm<权限数值>:查找符合指定的权限数值的文件或目录

  • -print:将匹配的文件或目录输出到标准输出

  • -regex<正则>:指定正则字符串寻找文件或目录;

  • -size<文件大小>:查找符合指定的文件大小的文件;不加单位默认为b(512字节);

  • (+表示大于;-表示小于;大小单位:c(1字节)/w(2字节)/b(512字节)/k/M/G...)

  • -type<文件类型>:只寻找符合指定的文件类型的文件

  •           <文件类型>      f:普通文件        l:链接文件        d:目录        c:字符设备        b:块设备       

                               s:套接字           p:Fifo管道文件

  • -user<属主>:查找符合指定的属主的文件或目录;(-nouser不属于本地属主;-uid)

  • -group<属组>:查找符合指定属组的文件或目录;(-nogroup不属于本地属组;-gid)

  • -exec<执行指令>:find缩匹配的文件执行该指令;格式:-exec command {} \;

  • -ok<执行指令>:和-exec类似,但在执行指令前会询问用户是否确定执行

xargs:

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

示例:

    1.列出当前目录及子目录下所有文件和文件夹

        find .

    2.在/home目录下查找以.txt结尾的文件名;(忽略大小写:-iname)

        find /home -name "*.txt"

    3.当前目录及子目录下查找所有以.txt和.pdf结尾的文件

        find . -name "*.txt" -o -name "*.pdf"

    4.匹配文件路径或者文件

        find /usr/ -path "*local*"

    5.基于正则表达式匹配文件路径;(忽略大小写:-iregex)

        find . -regex ".*\(\.txt\|\.pdf\)$"

    6.找出/home下不是以.txt结尾的文件

        find /home ! -name "*.txt"

    7.向下最大深度限制为3的所有文件

        find . -maxdepth 3 -type f

    8.搜索最近七天内被访问过的所有文件(-7表示7天内;+7表示超过7天)

        find . -type f -atime -7

    9.搜索访问时间超过10分钟的所有文件

        find . -type f -amin +10

    10.找出比file.log修改时间更新的文件

        find . -type f -newer file.log

    11.搜索大于10KB的文件

        find . -type f -size +10k

    12.删除当前目录下所有.txt文件

    find . -type f -name "*.txt" -delete

    13.当前目录下搜索出权限为777的文件

        find . -type f -perm 777

    14.找出当前目录下权限不是644的php文件

        find . -type f -name "*.php" ! -perm 644

    15.找出当前目录用户tom拥有的所有文件

        find . -type f -user tom       

    16.找出当前目录用户组sunk拥有的所有文件

    find . -type f -group sunk

    17.找出当前目录下所有root的文件,并把所有权更改为用户tom

        find .-type f -user root -exec chown tom {} \;

        {} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名

    18.找出自己家目录下所有的.txt文件并删除

    find $HOME/. -name "*.txt" -ok rm {} \;

    19.查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中

        find . -type f -name "*.txt" -exec cat {} \;> all.txt

    20.将30天前的.log文件移动到old目录中

        find . -type f -mtime +30 -name "*.log" -exec cp {} old \;

    21.找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来

        find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

    22.查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk

        find . -path "./sk" -prune -o -name "*.txt" -print

    23.要列出所有长度为零的文件

        find . -empty

    24.列出当前目录下所有文件的详细信息

        find . -type f -exec ls -l {} \;

    25.在/logs 目录中查找更改时间在 5 日以前的文件并删除它们

    find logs -type f -mtime +5 -exec rm {} \;

    26.当前目录中查找所有文件名以.log 结尾且更改时间在 5 日以上的文件;并

        提示是否确定删除

        find . -name "*.conf" -mtime +5 -ok rm { } \;

    27.查找当前用户主目录下的所有文件

        find $HOME -print   或者 find ~ -print

    28.让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户

        具有读权限的文件

        find . -type f -perm 644 -exec ls -l { } \;

    29.为了查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径

        find / -type f -size 0 -exec ls -l { } \;

    30.查找/var/logs目录中更改时间在7日前的普通文件,并在删除前询问它们

        find /var/logs -type f -mtime +7 -ok rm { } \;

    31.为了查找系统中所有属于 root 组的文件

        find . -group root -exec ls -l { } \;

    32.删除当目录中访问时间在 7 日以来、含有数字后缀的 admin.log文件(如admin.log123)

        find . -name "admin.log[0-9][0-9][0-9]" -atime -7 -ok rm { } \;

    33.为了查找当前文件系统中的所有目录并排序

        find . -type d | sort

    34.查找当前目录下的每一个普通文件,然后使用 xargs 命令来测试它们分别属于哪类文件

        find . -type f | xargs file

    35.查找当前目录下所有txt文件 ,然后把结果保存到/tmp/txt.list 文件中

        find / -name "*.txt" | xargs echo "" >/tmp/txt.list

    36.在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限

        find . -perm -7 | xargs chmod o-w

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

        find . -type f | xargs grep "hostname"

    38.当前目录及子目录中查找文件名以一个大写字母开头的文件

        find . -name "[A-Z]*"

    39.希望在/usr/local目录下查找文件,但不希望在/usr/local/mysql 目录下查找

        find /usr/local -path "/usr/local/mysql" -prune -o -print

    40.希望在/usr/local目录下查找文件,但不希望在/usr/local/mysql和/usr/local/php目录下查找

        find /usr/local \( -path /usr/local/mysql -o -path /usr/local/php \) -prune -o -print

    41.查找当前目录下非root属主的文件

        find . ! -user root -type f

    42.当前目录查找更改时间比文件1.txt新但比文件2.txt旧的文件

        find . -type f -newer 1.txt ! -newer 2.txt

    43.在当前目录下查找文件长度大于 1 M 字节的文件

        find . -size +1000000c   ==  find . -size +1M

    44.在根目录下开始查找名称为passwd的文件

        find / -name "passwd" -depth

论坛还有一些find命令的帖子,个人觉得上面这些应该足够了!

当然你也可以继续....i_f05.gifi_f05.gif

    http://ask.apelearn.com/question/6824   

    http://ask.apelearn.com/question/13493

    http://ask.apelearn.com/question/10157 

2018-02-05 15:26 举报
已邀请:
0

kindy

赞同来自:

上面的有什么不对的地方,请在下面留言指出。谢谢!

0

kevinxlau - 好好学习,天天向上。

赞同来自:

i_f48.gif归纳得很全,实用好文,收藏了。

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: