遇到问题
目录下文件个数超 100W , grep 查询文件太慢
如何解决
压缩超 30 天未修改的文件, 可以大大减少目录下文件数, 提升查询效率
查看准备压缩的文件个数
find . -type f -mtime +30 -print | wc -l
将多个文件压缩为一个文件
find . -type f -mtime +30 -print0 | tar -cvf xxx.tar --null -T -
查看压缩包下文件个数
tar -tvf xxx.tar | wc -l
删除已压缩备份的文件
find . -type f -mtime +30 -delete
模糊匹配查找压缩包下的文件
tar -tvf xxx.tar | grep 'xxxxx'
不解压的情况下查看 aaa.txt 的文件内容
tar -Oxf xxx.tar aaa.txt
解压到指定目录
tar -xvf xxx.tar -C /xxx/xxx/
或者说, 在磁盘空间足够、且有查询历史文件需求的情况下, 直接将该目录下文件定期拆分移动到不同的目录下
find path1 -type f -mtime +$days -exec mv {} path2 \;
$days
视情况而定: -mtime +30 表示 30 天前或更早的文件, -mtime -30 表示 30 天内或更近的文件。
例如, 想要查看按天生成的固定文件xxx.log, 创建时间在10天内的详细信息, 就用 -10
find path1 -iname "xxxx.log" -mtime -10 -exec ls -lh {} \;
知识点
find .
: 在当前目录及子目录下查找find . -maxdepth 2
指定层级深度, 递归查询当前目录下的第一、二层目录
- mtime :
- linux 文件有三种时间戳
stat filename
, 访问时间 atime, 修改时间 mtime, 更改时间 ctime - atime : 文件最后一次被访问的时间. 当读取文件内容时, atime 会更新
- mtime : 文件内容最后一次被修改的时间. 当编辑或更改文件内容时, mtime 会更新
- ctime : 文件元数据(权限,所有权等)最后一次被更改的时间. 当更改文件的元数据时, ctime 会更新
- linux 文件有三种时间戳
- print : 会一行一个输出符合条件的文件名
- print0 : 会在每个文件名之间添加一个空字符
\0
作为分隔符之后输出一行内容 --null -T -
:--null
指示 tar 命令使用空字符作为文件名分隔符-T -
选项告诉 tar 命令从标准输入读取文件名列表