find命令总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:

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命令总结的主要内容,如果未能解决你的问题,请参考以下文章

Mac下find命令常用语法总结

find命令总结与实战

find命令总结

linux系统中find 命令总结

find命令总结

find命令总结