在 利用命令行工具(0) 处理日志 一文中,一系列介绍命令行处理文件的文章,本文用于查找符合特定条件的文件。
本文介绍的命令适用 Linux 系统,在 Mac 系统下有些不同,甚至可能无法使用
按文件名搜索
寻找目录
只列出目录,而不显示文件
$ ls -d */
如果 用 ls -d .
,只能显示当前目录本身,而不能显示当前目录内容
寻找隐藏文件
列出当前目录下的隐藏文件,即以 .
开头的文件和文件夹
$ ls -d .*
上面这种写法会将当前目录( .
)和上层目录( ..
)一并显示出来,下面的写法可以将这两项排除:
$ ls -d .[!.]*
寻找所有的隐藏文件
$ find -type f -name ".*"
按文件名寻找文件
当前目录下,按照文件名关键字(比如 access.log
)寻找文件,并打印出文件路径和名称
$ find . -name "access.log" -print
这里搜索起始位置 .
和搜索后动作 -print
都是缺省值,可以不提供,简化为:
$ find -name "access.log"
按文件名寻找文件夹
当前目录下,寻找名称中包含关键字的文件夹,使用 -type
$ find -type d -name "log"
忽略大小写
按文件名寻找文件,忽略大小写,使用 -iname
参数
$ find -iname "access.log"
类似 Access.log
、 accEss.log
都会被搜索出来
按文件属性搜索
寻找软链接(符号链接)
$ find -type l
寻找 777 属性的文件
$ find -type f -perm 777
寻找当前目录下 777 属性的文件夹
仅在当前目录下寻找,而不继续搜索子文件夹
$ find -maxdepth 1 -type d -perm 777
寻找只读文件
$ find -perm 0644
按文件属主搜索
$ find -user zhangsan
寻找所有属于 zhangsan 的文件
按文件大小搜索
寻找空文件
寻找空文件,包括所有子文件夹
$ find . -empty
仅在当前目录下寻找空文件
仅在当前层级目录下寻找,不进入子目录中
$ find . -maxdepth 1 -empty
寻找指定大小的文件
记得有个文件是 3.4MB 大小,不记得放哪里了,用 find
找出来:
$ find . -size 4M
-size
不接收浮点型数值,需要预先向上取整。
寻找大文件
磁盘快满了,需要在整个文件系统中寻找超大文件的位置。首先查看哪个目录比较大
$ du -h -d 1
再在目录里寻找超过 1G 的文件
$ find . -size +1G
找到后,列出文件详细信息,并按大小降序排列
$ find . -size +1G -print0 | xargs -0 ls -hlS
其他可以用的单位:
- 字节:c
- 512字节块:b(不写单位时的默认单位)
- 双字节:w(适合搜中文)
- kB:k
- MB:M
- GB:G
按修改时间寻找文件
寻找最新创建的文件
$ ls -Atr | tail -1
寻找过去7天内修改过的文件
$ find . -mtime -7
准确的说,是过去 7x24 小时内修改过的文件
参照其他文件的修改时间
寻找比某文件(比如 access.log
)更晚修改过的文件,
$ find . -newer "access.log"
寻找最近24小时内被修改过的文件
$ find . -mtime 0
取反逻辑
寻找扩展名不是 .gz
的文件:
$ find . -not -name "*.gz"
寻找非空的文件:
$ find . -not -empty -name "*.log"
上面的命令里, -not
可以简化为叹号 !
find 命令的用法总结
find
命令的基本格式为:
$ find 参数 起始搜索位置 表达式
其中:
参数
规定了 find 命令的行为,比如搜索时如何处理软链接,是否使用优化算法等参数起始搜索位置
规定了搜索的起始位置,也就是搜索的顶层目录。表达式
规定了满足什么条件的文件可以被筛选出来(Tests),和筛选后的进一步操作(Actions):
Windows 批处理文件
另外,除了这些 Linux 的命令行以外,在 Windows 下还可以使用如下批处理程序,实现搜索文件的目的:
如果您对本文有疑问或者寻求合作,欢迎 联系邮箱 。邮箱已到剪贴板
系列: Linux 工具
精彩评论
本站 是个人网站,采用 署名协议 CC-BY-NC 授权。
欢迎转载,请保留原文链接 https://www.lfhacks.com/tech/log-toolkit-find-file/ ,且不得用于商业用途。