ls /var/log/zabbix/zabbix-backup/ -lt | awk '{if (NR>40) print $9}' | xargs rm -rf
通过ls -lt命令最新的文件,排在最前面。通过awk 获取文件名,判断大于40个文件的列出来,即这里列出来的就是最老于40的文件。然后通过xargs rm -rf进行删除。
ls /var/log/zabbix/zabbix-backup/ -lt
total 58284
-rw-r--r-- 1 root root 1528615 Oct 27 12:00 zabbix_cfg__20191027-1200_db-mysql-4.2.0.sql.gz
-rw-r--r-- 1 root root 1529029 Oct 26 12:00 zabbix_cfg__20191026-1200_db-mysql-4.2.0.sql.gz
root@zabbix:~# ls /var/log/zabbix/zabbix-backup/ -lt | awk '{if (NR>35) print $9}'
zabbix_cfg__20190923-1200_db-mysql-4.2.0.sql.gz
zabbix_cfg__20190922-1200_db-mysql-4.2.0.sql.gz
zabbix_cfg__20190921-1200_db-mysql-4.2.0.sql.gz
zabbix_cfg__20190920-1200_db-mysql-4.2.0.sql.gz
zabbix_cfg__20190919-1200_db-mysql-4.2.0.sql.gz
以下转化为shell 做定时任务删除旧的备份。这里注意 awk 要引用sehll 外部变量。此时引号中间一单引号用需要"'"$i"'"进行引用外部的变量。这里如果不用引用外部的变量,ls返回的结果不是绝对路径会导致删除失败。前面定义了路径的变量,然后在awk shell当中进行引用。
cat /usr/bin/dbackup-router.sh
#!/bin/bash
dir=$(ls -lt /router |awk '/^d/ {print $NF}')
for i in $dir
do
ls -lt /router/$i | awk '{if (NR>40) print "/router/""'$i'""/"$9}' |xargs rm -rf
done
网友评论