Linux 基础:文件查找 find

在linux的日常管理中,find的使用频率很高,熟练掌握对提高工作效率很有帮助。

find的语法比较简单,常用参数的就那么几个,比如 -name-type-ctime等。初学的同学直接看第二部分的例子,如需进一步了解参数说明,可以参考find的帮助文档。

find语法如下:

find(选项)(参数)

根据文件名查找

列出当前目录以及子目录下的所有文件

find .

找到当前目录下名字为 11.png的文件

find . -name "11.png"

找到当前目录下所有的 jpg文件

find . -name "*.jpg"

找到当前目录下的 jpg文件和 png文件

find . -name "*.jpg" -o -name "*.png"

找出当前目录下不是以 png结尾的文件

find . ! -name "*.png"

根据正则表达式查找

备注:正则表示式比原先想的要复杂,支持好几种类型。可以参考这里

找到当前目录下,文件名都是数字的 png文件。

find . -regex "\./*[0-9]+\.png"

根据路径查找

找出当前目录下,路径中包含 wysiwyg的文件/路径。

find . -path "*wysiwyg*"

根据文件类型查找

通过 -type进行文件类型的过滤。

  • f 普通文件
  • l 符号连接
  • d 目录
  • c 字符设备
  • b 块设备
  • s 套接字
  • p Fifo

举例,查找当前目录下,路径中包含 wysiwyg的文件

find . -type f -path "*wysiwyg*"

限制搜索深度

找出当前目录下所有的 png,不包括子目录。

find . -maxdepth 1 -name "*.png"

相对应的,也是 mindepth选项。

find . -mindepth 2 -maxdepth 2 -name "*.png"

根据文件大小

通过 -size来过滤文件尺寸。支持的文件大小单元如下

  • b —— 块(512字节)
  • c —— 字节
  • w —— 字(2字节)
  • k —— 千字节
  • M —— 兆字节
  • G —— 吉字节

举例来说,找出当前目录下文件大小超过100M的文件

find . -type f -size +100M

根据访问/修改/变化时间

支持下面的时间类型。

  • 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
  • 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
  • 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

举例,找出1天内被修改过的文件

find . -type f -mtime -1

找出最近1周内被访问过的文件

find . -type f -atime -7

将日志目录里超过一个礼拜的日志文件,移动到 /tmp/old_logs里。

find . -type f -mtime +7 -name "*.log" -exec mv {} /tmp/old_logs \;

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

另外, \;用来表示命令结束,如果没有加,则会有如下提示

find: -exec: no terminating ";" or "+"

根据权限

通过 -perm来实现。举例,找出当前目录下权限为 777的文件

find . -type f -perm 777

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

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

根据文件拥有者

找出文件拥有者为 root的文件

find . -type f -user root

找出文件所在群组为 root的文件

find . -type f -group root

找到文件后执行命令

通过 -ok、和 -exec来实现。区别在于, -ok在执行命令前,会进行二次确认, -exec不会。

看下实际例子。删除当前目录下所有的 js文件。用 -ok的效果如下,删除前有二次确认。

➜  find find . -type f -name "*.js" -ok rm {} \;
"rm ./1.js"?

试下 -exec,直接就删除了:

find . -type f -name "*.js" -exec rm {} \;

找出空文件

例子如下

touch {1..9}.txt
echo "hello" > 1.txt
find . -empty

原文发布于微信公众号 - 程序员宝库(chengxuyuanbaoku)

原文发表时间:2018-01-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

PHP使用SOAP调用.net的WebService问题

项目的需求,需要和一个.net系统进行数据交换,合作方提供了一个WebService接口。这个与一般的PHP POST或GET传值再查库拿数据的思路有点不一样,...

3656
来自专栏用户2442861的专栏

HTTP POST GET 本质区别详解

    一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交

2902
来自专栏iKcamp

系列3|走进Node.js之多进程模型

文:正龙(沪江网校Web前端工程师) 本文原创,转载请注明作者及出处 之前的文章“走进Node.js之HTTP实现分析”中,大家已经了解 Node.js 是...

4237
来自专栏北京马哥教育

用 Python 脚本实现对 Linux 服务器的监控

目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件)、 glances(资...

5766
来自专栏北京马哥教育

rsync - Linux下进行文件同步命令

rsync是Linux下进行文件同步到一个命令,可以同步两台计算机到文件与目录,利用查找文件中到不同块以减少数据传输。也可以在一台电脑到不同目录间同步,比如可以...

4956
来自专栏程序员宝库

Linux 基础:文件查找 find

在linux的日常管理中,find的使用频率很高,熟练掌握对提高工作效率很有帮助。 find的语法比较简单,常用参数的就那么几个,比如 -name、 -type...

37413
来自专栏LhWorld哥陪你聊算法

【Dubbo篇】--Dubbo框架的使用

Provider: 提供者.发布服务的项目. Registry: 注册中心.所有提供者必须去注册中心注册自己所有能发布的服务. Consumer: 消费者.调用...

5941
来自专栏逆向与安全

GDB多线程调试分析

多线程调试的主要任务是准确及时地捕捉被调试程序线程状态的变化的事件,并且GDB针对根据捕捉到的事件做出相应的操作,其实最终的结果就是维护一根叫thread li...

1160
来自专栏沈唁志

GET与POST传递数据的长度分析

1623
来自专栏北京马哥教育

Python 的异步 IO:Asyncio 简介

糖豆贴心提醒,本文阅读时间7分钟 Python 的 asyncio 类似于 C++ 的 Boost.Asio。 异步 IO,就是你发起一个 IO 操作,不用等...

3078

扫码关注云+社区

领取腾讯云代金券