在Bash脚本中被这个`find`命令混淆了吗?


8

我有一个bash脚本,该脚本由无法再解释其含义的人创建,用于自动对文件夹进行定位和备份。目前,我对最后一行感到困惑:

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

3
没有后续问题,每个问题一个问题。您可以问任意多个问题。因此,请单击“问问题”,然后问另一个问题,不要将其添加到另一个底部。
ctrl-alt-delor

Answers:


11

find命令将删除目录中或/home/_backups/pokebrawl目录中超过7天(或更确切地说,在上周内未修改)的任何常规文件。

可能应该读

find "$DESDIR" -mtime +6 -type f -delete

要么

find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete

因为已经有一个完美的变量保存了该目录名称。如果DESDIR由于某种原因为空或未设置,则第二个变体将导致错误。

我假设这是仅保留上周备份值的一种方法。我建议使用类似borgbackuprestic替代的名称,因为这样可以在不使用更多空间的情况下将备份保留更长时间(即使一年的每小时备份也不会占用太多空间,如果数据变化不大)。 。它们可以对数据进行重复数据删除,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计划(man 5 crontab)的详细信息,请参见系统上的crontab手册。


1
在“ 它应该阅读”方面:我已经看到一些脚本编写者在进行这种类型的find/ delete操作时故意避免使用环境变量,以防某些doo​​fus忘记将其设置$DESDIR或设置为“ /”或类似的错误设置。
史蒂夫

@steve好吧,如果DESDIR更改并且find命令未更新,它将无法清除正确的目录。使用${DESDIR:?Not set correctly}或类似的方法可能会有所帮助。
库萨兰达

5
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.