Bash 脚本 tar 具有保留期限的特定文件

Bash 脚本 tar 具有保留期限的特定文件

我是 bash 脚本的新手。我需要将文件保留一个月,并将其他文件存档。

例子:

文件格式:WE20160225.log (20160225年月日)

假设目录中/oracle/Sales有2个文件:

WE20160130.log

WE20151201.log

我需要 tar WE20151201.log

但 WE20160130.log 则不然,因为该文件距离现在还不到一个月。我怎样才能做到这一点? (可能需要对文件名进行子字符串化)

我可以更改目录,但不知道下一步该怎么做。我的逻辑是循环遍历文件并从文件名中获取日期,然后与当前日期进行比较。

我需要使用文件名日期,而不是文件修改日期。

SALES_DIR="/oracle/sales/"
cd $SALES_DIR

答案1

我用这样的东西:

find <dir> -name <pattern> -mtime <timeframe> -exec <cmd> <options> {} \;
find . -type f -name '*log*' -mtime +10 -exec tar -rvf backup$(date +"%m-%d-%y") {} \;

查找名称中包含 log 且早于 10 天的文件。创建包含今天日期的 tar 存档并附加所有文件。您还可以删除 $date 并仅附加新文件,然后使用分号并使用 rm {} \; 删除文件。

答案2

你可以使用这样的东西:

find somedir/* -mtime +5 -exec rm {} \;

它使用 find 来查找超过 5 天的文件,并将找到的文件传递给删除。

答案3

这是用于压缩一个月前的日志文件的脚本。

#!/bin/bash
files=($(find /oracle/Sales -mtime +30))
tar cvfz backup.tar.gz "${files[@]}"

-mtime +number-of-days描述您需要备份的文件。

要删除旧文件,请尝试此操作

find /oracle/Sales -mtime +30 | xargs -n1 echo rm

如果得到正确的输出,则从echo线路中删除。

相关内容