• 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
    
  • 相关阅读:
    Idea 一些常用的小工具
    玩转SpringBoot之定时任务详解
    mysql 创建自定义函数
    mysql
    一段mysql脚本,生成一些随机数时使用。
    mysql 命令行常用操作与mysql too many connections 解决方法
    如何获取多个分组之后的第一条数据
    Linux aliyun ECS CentOS8 服务器安装Redis 部署集群 ,JDK安装与Tomcat配置
    Redis 各个版本下载地址
    centos7安装mysql5.7(rpm安装版)与 Mysql 权限
  • 原文地址:https://www.cnblogs.com/Mr-Ding/p/9810796.html
Copyright © 2020-2023  润新知