MOD*_*unt 8 bash find shell-script
我有一个 bash 脚本,它是由无法解释其含义的人创建的,用于自动对文件夹进行 TAR 处理并对其进行备份。目前我对最后一行感到困惑:
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
Run Code Online (Sandbox Code Playgroud)
完整的脚本如下。
#!/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
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 11
该find命令将删除目录中或/home/_backups/pokebrawl目录下超过 7 天(或更准确地说,在上周内未修改)的任何常规文件。
它应该大概读
find "$DESDIR" -mtime +6 -type f -delete
Run Code Online (Sandbox Code Playgroud)
或者
find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete
Run Code Online (Sandbox Code Playgroud)
因为已经有一个非常好的变量保存该目录名称。如果DESDIR由于某种原因为空或未设置,则第二个变体将导致错误。
我假设这是一种仅保留上周备份价值的方法。我建议使用类似borgbackup或restic代替的东西,因为它们可以在不使用更多空间的情况下将备份保留更长时间(如果数据变化不大,即使一年的每小时备份也不会占用太多空间) . 他们对数据进行重复数据删除并borgbackup额外支持压缩(两者都支持远程备份和加密)。
要每 24 小时(午夜)运行脚本,请使用 cron 作业。
首先,发出命令crontab -e。这将为活动用户打开一个带有当前 crontab 的编辑器(这可能是也可能不是空文件)。
然后加
@daily /path/to/the/script.sh
Run Code Online (Sandbox Code Playgroud)
(path/to/the/script.sh脚本的路径名在哪里)。
保存并退出编辑器。
该脚本现在将在午夜甚至晚上调用。
如果您想在每天下午 13:30 运行脚本,请将以下内容添加为 crontab 条目:
30 13 * * * /path/to/the/script.sh
Run Code Online (Sandbox Code Playgroud)
有关如何编写 crontab 计划的详细信息,请参阅系统上的 crontab 手册 ( man 5 crontab)。
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
Run Code Online (Sandbox Code Playgroud)
这将查找目录/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.
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)