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

标签 linux bash

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

#!/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

但它不起作用,它创建备份但在目录超出限制后不删除旧文件

最佳答案

你的问题不清楚(我们只能猜测“限制”是什么意思,但我们不明白它是什么),并且缺乏动力。

system call 级别(请参阅 syscalls(2) ),相关系统调用是带有 RLIMIT_FSIZEsetrlimit(2) ,然后是带有 SIGXFSZsignal(7) 相关系统调用(例如 sigaction(2) )。

因此,您可以使用 ulimit 内置函数和 trap 函数。但是,您的 shell 脚本执行的程序可能会更改文件大小限制,并且可能会捕获 SIGXFSZ 信号。

请注意,目录的大小(由 stat(2) 给出,因此 stat(1)ls(1) )不是其文件的累积大小(因为某些文件可能是多个目录中的 hard-linked;文件是 inodes - 请参阅 inode(7) )。它只是目录条目的大小。

或者,您可以计算文件的累积大小(使用 du(1)find(1)gawk(1) )并根据它采取一些操作,也许删除一些大文件(但考虑 - 可能通过决定忽略它们 - 其他进程在脚本执行期间写入文件或目录)。

也许您可能对 disk quotas 感兴趣(请参阅 quotactl(2)quota(1)quotacheck(8) )

你可以做 incremental backups 。您可以使用 tar(1) 以外的其他实用程序来实现此目的(例如 darafio 等)。请注意,mv(1) & cp(1) & tar 有一些 --backup 选项。也许您可能会考虑 logrotate(8) 来处理不断增长的日志文件。

关于linux - 是否可以对文件夹应用计数功能,然后在文件夹超出限制时删除文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50267248/

相关文章:

bash - tkdiff 快捷键有哪些?

linux - awk从列中找到最大值和最小值并存储在其他列中

linux - Slackware 在添加新用户时创建目录

linux - 为 powerpc 构建 mysql++ 库

linux - grepping 数据 Apache access.log

mysql - 大数据文件、操作和搜索

linux - 从 cron.daily 分离 Linux 脚本

bash - atoi() 类似于 bash 中的函数?

linux - 无法通过squid3访问https网站

linux - 使用 awk 搜索模式并从日志文件中打印接下来的 15 行