是否可以对文件夹应用计数功能,然后在文件夹超过限制时删除文件?

我正在尝试编写一个脚本,当目录超过特定限制时,该脚本可以从目录中删除旧文件。这是我的剧本


#!/bin/bash

#incremental backup of upload folder only

LIMIT=2

TIME=`date +%b-%d-%y%s`

FILENAME=backup-$TIME.tgz

SRCDIR=/home/Man/blabla

DESDIR=/home/Man/newdir

EXCFILE=/home/Man/blabla/up

if [ $LIMIT -gt 2 ]; then 

cd $DESDIR

ls -lt | grep .tgz | tail -n 1 | xargs -r rm

tar -cvzf $DESDIR/$FILENAME $SRCDIR --exclude=$EXCFILE 

else

tar -cvzf $DESDIR/$FILENAME $SRCDIR --exclude=$EXCFILE 

fi

但它无法正常工作,它会创建备份,但在dir超出限制后不会删除旧文件


烙印99
浏览 259回答 2
2回答

慕少森

您的问题尚不清楚(我们只能猜测“极限”是什么意思,但我们不明白这是什么),并且缺乏动力。在系统调用级别(请参阅syscalls(2)),将相关的系统调用依次为setrlimit(2)和signal(7)相关的调用(例如sigaction(2))。RLIMIT_FSIZESIGXFSZ因此,您可以使用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)处理不断增长的日志文件。
打开App,查看更多内容
随时随地看视频慕课网APP