我是 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
线路中删除。