我正在尝试编写一个脚本,当目录超过特定限制时,该脚本可以从目录中删除旧文件。这是我的剧本#!/bin/bash#incremental backup of upload folder onlyLIMIT=2TIME=`date +%b-%d-%y%s`FILENAME=backup-$TIME.tgzSRCDIR=/home/Man/blablaDESDIR=/home/Man/newdirEXCFILE=/home/Man/blabla/upif [ $LIMIT -gt 2 ]; then cd $DESDIRls -lt | grep .tgz | tail -n 1 | xargs -r rmtar -cvzf $DESDIR/$FILENAME $SRCDIR --exclude=$EXCFILE elsetar -cvzf $DESDIR/$FILENAME $SRCDIR --exclude=$EXCFILE fi但它无法正常工作,它会创建备份,但在dir超出限制后不会删除旧文件
2 回答
慕少森
TA贡献2019条经验 获得超9个赞
您的问题尚不清楚(我们只能猜测“极限”是什么意思,但我们不明白这是什么),并且缺乏动力。
在系统调用级别(请参阅syscalls(2)),将相关的系统调用依次为setrlimit(2)和signal(7)相关的调用(例如sigaction(2))。RLIMIT_FSIZE
SIGXFSZ
因此,您可以使用ulimit
内置函数和trap
一个内置函数。但是,由Shell脚本执行的程序可能会更改文件大小限制,并可能捕获SIGXFSZ
信号。
注意,目录的大小(由stat(2)给出,因此stat(1)和ls(1))不是其文件的累积大小(因为某些文件可以在多个目录中进行硬链接;索引节点-参见inode(7))。它只是目录条目的大小。
或者,您可以计算文件的累积大小(使用du(1)或find(1)或gawk(1)),然后根据该文件采取一些措施,也许删除一些大文件(但可以考虑-也许通过决定忽略它们) -在脚本执行期间写入文件或目录的其他进程)。
也许您可能对磁盘配额感兴趣(请参阅quotactl(2),quota(1),quotacheck(8)))
您可以进行增量备份。为此,您可以使用tar(1)以外的其他实用程序(例如dar,afio,...)。注意,mv(1)&cp(1)&tar有一些--backup
选择。也许您可能考虑使用logrotate(8)处理不断增长的日志文件。
- 2 回答
- 0 关注
- 258 浏览
添加回答
举报
0/150
提交
取消