【问题标题】:Is it possible to a apply count function on a folder and then delete a file when folder exceed a limit? [duplicate]是否可以对文件夹应用计数功能,然后在文件夹超过限制时删除文件? [复制]
【发布时间】:2018-05-10 18:47:01
【问题描述】:

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

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

但它不工作它创建备份但在目录超过限制后不删除旧文件

【问题讨论】:

  • 限制什么?
  • 对目标文件夹添加限制。由于目标文件夹包含备份 tar,我希望目标文件夹只包含 2 个文件,只要添加新文件就删除旧文件。
  • 这是 logrotate 的工作。
  • 编辑你的问题来改进它(目前还不清楚)。说明你关心什么limit。解释您要删除的大文件是什么以及在哪里。激发您的问题(例如,您为什么不使用备份程序或logrotate?)

标签: linux bash


【解决方案1】:

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

system call 级别(参见syscalls(2)),相关的系统调用是setrlimit(2)RLIMIT_FSIZE,然后是signal(7) 相关的系统调用(例如sigaction(2))和SIGXFSZ

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

请注意,目录的大小(由 stat(2) 给出,因此 stat(1)ls(1)不是其文件的累积大小(因为某些文件可能是 @987654329 @ 在几个目录中;文件是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) 来处理不断增长的日志文件。

【讨论】:

    【解决方案2】:

    为什么我没有使用 logrotate,因为那不是要求。反正我已经自己解决了。我添加了一个计数函数,它计算目录中的 .tgz 文件,每当 $count 超过 $limit 时,旧文件就会被删除。

    LIMIT=3 
    COUNT=$(ls $DESDIR | grep '\.tgz$' | wc -l )
    if [ "$COUNT" -gt "$LIMIT" ]; then
    cd $DESDIR
    ls -t | grep .tgz | tail -n "+$(($LIMIT + 1))" | xargs -r rm && tar -cvzf $DESDIR/$FILENAME $SRCDIR --exclude=$EXCFILE --exclude=$EXCSNRFILE
    else 
    echo "script is not working"
    

    【讨论】:

      猜你喜欢
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2013-11-23
      • 2019-02-08
      • 2012-03-14
      • 2021-11-29
      相关资源
      最近更新 更多