我有一个 bash 脚本,由不再能够解释其含义的人创建,用于自动 TARing 文件夹并备份它。目前我对最后一行感到困惑:
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
完整的脚本如下。
#!/bin/bash
#Purpose = Backup of Important Data
#Created on 17-1-2012
#Author = Hafiz Haider
#Version 1.0
#START
TIME=$(date +"%m-%d-%Y-%T")
FILENAME=pokebrawl-$TIME.tar.gz
SRCDIR=/home/servers/brawl/world
DESDIR=/home/_backups/pokebrawl
tar -cpzf $DESDIR/$FILENAME $SRCDIR
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
#END
答案1
该find
命令将删除目录中或目录下/home/_backups/pokebrawl
超过 7 天(或更准确地说,上周未修改)的任何常规文件。
它应该大概读
find "$DESDIR" -mtime +6 -type f -delete
或者
find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete
因为已经有一个非常好的变量保存该目录名称。如果DESDIR
由于某种原因为空或未设置,第二个变体将导致错误。
我假设这是一种只保留上周备份的方法。我建议使用类似borgbackup
或restic
的东西,因为它们能够在不使用更多空间的情况下保留备份更长时间(如果数据变化不大,即使一年每小时的备份也不会占用太多空间) 。它们对数据进行重复数据删除,还borgbackup
支持压缩(都支持远程备份和加密)。
要每 24 小时(午夜)运行一次脚本,请使用 cron 作业。
首先,发出命令crontab -e
。这将为活动用户打开一个包含当前 crontab 的编辑器(这可能是也可能不是空文件)。
然后加
@daily /path/to/the/script.sh
(其中path/to/the/script.sh
是脚本的路径名)。
保存并退出编辑器。
现在剧本将在午夜甚至晚上调用。
如果您想在每天下午 13:30 运行该脚本,请添加以下内容作为 crontab 条目:
30 13 * * * /path/to/the/script.sh
有关如何编写 crontab 计划的详细信息,请参阅系统上的 crontab 手册 ( man 5 crontab
)。
答案2
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
这会找到目录中/home/_backups/pokebrawl
最近几天未修改的所有文件+6
并将其删除。注:+6
相当于 7 天。
查看man find
这些开关如何工作:
$ man find
...
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
在 Redhat 发行版上,您只需将此脚本放入目录中/etc/crondaily
,它就会每天运行。您可以看到那里已经有其他脚本可以用作示例:
$ sudo ls -l /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Aug 1 2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 17 2014 man-db.cron
-rwx------. 1 root root 208 Nov 4 2016 mlocate