Linux下面自动清理超过指定大小的文件
Linux下面自动清理超过指定大小的文件
思路:
1)查找test目录下的所有的文件
2)判断是否大于100M
3)大于100M则清空
以byte为单位显示文件大小,然后和100M大小做对比. 100M换算成字节为104857600这里判断是否大于等于100M,大于则使用echo语句将对应文件置空。
100M=100*1024*1024=104857600byte
可以使用dd命令创建一些大于和小于100M的文件进行测试
[root@Python test]# dd if=/dev/zero of=/test/sdsds bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0141979 秒,1.5 GB/秒
[root@Python test]# du -sh ./*
35M ./123
110M ./12sds
215M ./12ssdsds
5.7M ./jumpserver-master.zip
148K ./lnmp1.5.tar.gz
64M ./nextcloud-14.0.1.zip
20M ./Python-3.5.2.tgz
20M ./sdsds
[root@Python test]# du -sh -b ./*
36700160 ./123
115343360 ./12sds
225443840 ./12ssdsds
5931629 ./jumpserver-master.zip
149588 ./lnmp1.5.tar.gz
66439148 ./nextcloud-14.0.1.zip
20566643 ./Python-3.5.2.tgz
20971520 ./sdsds
[root@Python test]# ls -l ./*
-rw-r--r-- 1 root root 36700160 10月 18 11:58 ./123
-rw-r--r-- 1 root root 115343360 10月 18 11:58 ./12sds
-rw-r--r-- 1 root root 225443840 10月 18 11:59 ./12ssdsds
-rw-r--r-- 1 root root 5931629 10月 18 12:05 ./jumpserver-master.zip
-rw-r--r-- 1 root root 149588 10月 18 12:03 ./lnmp1.5.tar.gz
-rw-r--r-- 1 root root 66439148 10月 18 12:02 ./nextcloud-14.0.1.zip
-rw-r--r-- 1 root root 20566643 10月 18 12:01 ./Python-3.5.2.tgz
-rw-r--r-- 1 root root 20971520 10月 18 11:59 ./sdsds 注意:
如果文件是带小数点的M单位,比如文件大小为5.7M,则换算成byte单位时,就不能直接使用5.7*1024*1024=5976883.2这样计算了,因为这个5.7M的大小是估算出来的M单位的大小,不是精确到的. 如果直接加-b参数换算成byte单位大小则就是精确的值了,也可以使用-k参数来进行换算,如下:
[root@Python test]# du -sh jumpserver-master.zip
5.7M jumpserver-master.zip
[root@Python test]# du -sh -b jumpserver-master.zip
5931629 jumpserver-master.zip
[root@Python test]# du -sh -k jumpserver-master.zip
5796 jumpserver-master.zip
方法一: 使用"du -sh -b"或"du -sh -k"来计算文件大小
语法
# du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件] 参数说明:
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或--dereference-args 显示指定符号连接的源文件大小。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-k或--kilobytes 以1024 bytes为单位。
-l或--count-links 重复计算硬件连接的文件。
-L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或--megabytes 以1MB为单位。
-s或--summarize 仅显示总计。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-x或--one-file-xystem 一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或--exclude-from=<文件> <文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
--max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
--help 显示帮助。
--version 显示版本信息。 [root@Python test]# du -sh *
35M 123
110M 12sds
215M 12ssdsds
5.7M jumpserver-master.zip
148K lnmp1.5.tar.gz
64M nextcloud-14.0.1.zip
20M Python-3.5.2.tgz
20M sdsds
[root@Python test]# du -sh -b *
36700160 123
115343360 12sds
225443840 12ssdsds
5931629 jumpserver-master.zip
149588 lnmp1.5.tar.gz
66439148 nextcloud-14.0.1.zip
20566643 Python-3.5.2.tgz
20971520 sdsds 使用du -sh -b查找出相应文件的大小,同时使用awk 过滤第一个字段,只保留数字
[root@Python test]# du -sh -b * | awk '{ print $1 }'
36700160
115343360
225443840
5931629
149588
66439148
20566643
20971520 [root@Python test]# du -sh -b * | awk '{ print $2 }'
123
12sds
12ssdsds
jumpserver-master.zip
lnmp1.5.tar.gz
nextcloud-14.0.1.zip
Python-3.5.2.tgz
sdsds
批量处理的脚本
#!/bin/bash
#Author:Mr.Ding
#Created Time:2018-10-18 10:32:24
#Name:/root/cache_gt_60.sh
#Description:清理/test目录下大于或等于100MB的文件; for size in $(du -sh -b /test/* | awk '{ print $1 }')
do
for file in $(du -sh -b /test/* |grep ${size}|awk '{print $2}')
do
if [ ${size} -ge 104857600 ];then
echo ${file} ${size}
echo "" > ${file}
fi
done
done 结合crontab进行定时执行
[root@Python shell]# crontab -l
0 0 * * 6 /bin/bash -x /root/scripts/shell/cache_ge_100.sh 执行脚本后结果如下:
[root@Python test]# du -sh *
35M 123
4.0K 12sds
4.0K 12ssdsds
5.7M jumpserver-master.zip
148K lnmp1.5.tar.gz
64M nextcloud-14.0.1.zip
20M Python-3.5.2.tgz
20M sdsds
方法二:使用"ls -l"
ls命令是linux下用来列出目录下的文件. 下面是关于ls的一些常规用法:
ls -a 列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。
ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。
ls -F 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。
ls -s 在每个文件的后面打印出文件的大小。 size(大小)
ls -t 按时间进行文件的排序 Time(时间)
ls -A 列出除了"."和".."以外的文件。
ls -R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现
ls -L 列出文件的链接名。Link(链接)
ls -S 以文件的大小进行排序 ls可以结合管道符”|“来进行一下复杂的操作。比如: ls | less用于实现文件列表的分页
[root@Python test]# ls -l
总用量 464692
-rw-r--r-- 1 root root 36700160 10月 18 11:58 123
-rw-r--r-- 1 root root 1 10月 18 15:01 12sds
-rw-r--r-- 1 root root 1 10月 18 15:01 12ssdsds
-rw-r--r-- 1 root root 104857600 10月 18 15:12 dcml
-rw-r--r-- 1 root root 115343360 10月 18 15:12 dcscdxa
-rw-r--r-- 1 root root 104857600 10月 18 15:12 dcvbn
-rw-r--r-- 1 root root 5931629 10月 18 12:05 jumpserver-master.zip
-rw-r--r-- 1 root root 149588 10月 18 12:03 lnmp1.5.tar.gz
-rw-r--r-- 1 root root 66439148 10月 18 12:02 nextcloud-14.0.1.zip
-rw-r--r-- 1 root root 20566643 10月 18 12:01 Python-3.5.2.tgz
-rw-r--r-- 1 root root 20971520 10月 18 11:59 sdsds
[root@Python test]# ls -l * | awk '{print $5}'
36700160
1
1
104857600
115343360
104857600
5931629
149588
66439148
20566643
20971520
批量处理的脚本
#!/bin/bash
#Author:Mr.Ding
#Created Time:2018-10-18 15:14:20
#Name:/root/scripts/shell/cache_ge_100_1.sh
#Description:批量清理大于或等于100M的文件. for size in $(ls -l /test/* |awk '{print $5}')
do
for file in $(ls -l /test/*|grep $size |awk '{print $9}')
do
if [ ${size} -ge 104857600 ];then
echo ${file} ${size}
echo "" > ${file}
fi
done
done [root@Python test]# chmod 755 /root/scripts/shell/cache_ge_100_1.sh
加入计划任务同上 执行结果如下:
[root@Python test]# du -sh *
35M 123
4.0K 12sds
4.0K 12ssdsds
4.0K dcml
4.0K dcscdxa
4.0K dcvbn
5.7M jumpserver-master.zip
148K lnmp1.5.tar.gz
64M nextcloud-14.0.1.zip
20M Python-3.5.2.tgz
20M sdsds
Linux下面自动清理超过指定大小的文件的更多相关文章
- Linux下自动清理超过指定大小文件
作者:邓聪聪 扫描某个目录下的文件,发现超过指定大小即清空 1)扫描目录下的文件 2)判断文件大小 3)清空大于指定文件的内容 以byte为单位显示文件大小,然后和20M大小做对比. 20M换算成字节 ...
- Linux下自动清理超过指定大小文件的方法
由于线上业务用的squid,根据经验值如果长时间运行则缓存目录下的swap.state会慢慢变大,一旦超过60M,squid的性能就会急剧下降,因此需要定时去清理大于60M的swap.state文件. ...
- Linux中定时删除超过指定大小的文件夹
背景: 开发环境总是动不动就没有空间了, 大部分都是debug日志.所以有必要在日志很疯狂的时候,删除不必要的日志. 思路:一. 书写删除日志文件脚本: 定时任务执行. 但是有时候的日志是需要保存用 ...
- Linux下删除空文件,删除指定大小的文件
Linux下批量删除空文件(大小等于0的文件)的方法: find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还可以删除指 ...
- linux生成指定大小的文件(转)
# dd if=/dev/zero of=50M.file bs=1M count=50在当前目录下生成一个50M的文件 虚拟块设备文件更通用的名称是硬盘镜像文件(Hard Disk Image),但 ...
- php使用curl下载指定大小的文件
php中使用基于libcurl的curl函数,可以对目标url发起http请求并获取返回的响应内容.通常的请求方式类似如下的代码: public function callFunction($url, ...
- linux和window下生成任意大小的文件
在Windows环境下的实现方法 使用fsutil命令,在windows xp和win 7下应该都自带了这个命令.命令的格式是 fsutil file createnew 新文件名 文件大小.例如 ...
- Windows下创建指定大小的文件
前言 因为需要测试存储容量,所以需要能生成指定大小的文件. 执行 #语法:fsutil file createnew 路径和文件名 文件大小 fsutil file createnew D:\test ...
- linux shell 脚本 历史文件清理脚本,按天,按月,清理前N天的历史文件,删除指定大小历史文件,历史文件归档清理
不知道大家那有没有要清理的这个事情.需要清理目录历史文件.可能后续也会有很多其他地方需要清理历史文件,可能会用到. 我这两天空闲写了个脚本,清理比较方便,有要进行清理的大量历史文件的话可以用. 脚本用 ...
随机推荐
- sql数据库发布、订阅同步方式操作
Sql数据库发布订阅分为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅. 一.发布. 发布需要用实际的服务器名称,不能使用 ...
- POJ 2318 TOYS 利用叉积判断点在线段的那一侧
题意:给定n(<=5000)条线段,把一个矩阵分成了n+1分了,有m个玩具,放在为位置是(x,y).现在要问第几个位置上有多少个玩具. 思路:叉积,线段p1p2,记玩具为p0,那么如果(p1p2 ...
- Hadoop文件压缩
1. Hadoop的文件压缩需求 文件压缩对于大容量的分布式存储系统而言是必须的,它能带来两个好处: 1)减少了文件所需的存储空间: 2)加快了文件在网络上或磁盘间的传输速度. 2. Hadoop支持 ...
- javascript模块化编程规范
一.javascript模块化编程规范: 二.关于commenjs规范和AMD规范: 根本不同:前者用于服务器端同步加载模块:后者是客户端异步加载模块. 同点:两者都有一个全局函数require(), ...
- 【Linux】让Ubuntu 支持 GBK等字符集,解决中文乱码
对GBK,GB2312,GB18030字符集的支持是UBUNTU中文乱码的罪魁祸首,其实我们可以在保持UTF-8为默认编码的条件下添加对这几个编码的支持,以解决中文乱码问题. 我想这个问题肯定有其他人 ...
- webpack.config.js====引入Jquery库文件
1. 安装 cnpm install --save jquery expose-loader 2. 在webpack.config.js中配置 Jquery库是使用的webpack的一个插件Provi ...
- json解析数组类型的数据
//微信里一个检测是否有发送模版消息的权限的方法//此处的openid代表的微信用户openid,templateId代表的是模版消息idpublic boolean checkIsSendTempM ...
- 消息中间件之MQ详解及四大MQ比较
一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...
- hibernate课程 初探单表映射3-5 hibernate增删改查
本节简介: 1 增删改查写法 2 查询load和查询get方法的区别 3 demo 1 增删改查写法 增加 session.save() 修改 session.update() 删除 session. ...
- iOS多线程系统整理 swift
多线程 是一个应用程序内多个代码的执行路径,执行线程,同时在同一时间里执行不同的任务. 三种: 1.NSTread 2.Cocoa NSOperation (NSOperation,NSOpera ...