C语言 如何在unix中创建一个crontab作业,它将在特定的时间/日期将主目录中的所有文件移动到另一个目录?<



你好,我是Unix的新手,我正在尝试创建一个crontab作业,将我在主目录中的所有文件移动到一个名为backups的目录,该目录的名称包含字母f后面跟着数字1,3或7。在4月12日和11月9日晚上9时30分。

我的主目录:

arsenal.by       flhome           list1            stmnpgs
arsenal.pass     flhome2          list2            test.c
assignment       foreachScript1   list2.c          testdir
availisting.csv  funxdir          local.cshrc      testfile
backups          funxdir2         local.login      tmp.test
backups1         homlnk           local.profile    train
biglist          lab4             myfile           treat
biglist.c        lab5             myfile2          trick
biglist2         lab6             Myhome.list      tricking
CFiles.tar.Z     lab7             myinfo.fl        troll
clssnotes.txt    lab8             myList           typescript
delfh            lec3             names.txt        workdir
如果有人能帮我解决这个问题,我将不胜感激!

首先,为工作、专业或大学提供备份解决方案通常是一个坏主意,因为出错的风险可能非常高,而且本地备份显然有可能由于原始文件无法访问的原因而丢失。

然而,展示如何在cron中完成它是一个值得的练习,因为它是一种常见的任务类型,它可以在寻找更好的解决方案时为您提供一些掩护。

您的日期规范可以安全地作为一个cron条目来完成,因为只有一年中的一天变化,如果一天中的分钟和一年中的一天(或一周中的一天)都改变了,您将需要两个条目。

# M H DoM MoY DoW 
30 21 12 4,10 * BACKUPDIR=~/backups; ds=$(date +%Y%m%d%H%M%S); mkdir -p $BACKUPDIR; find ~/* -type d -prune -o -type f -name f*[137] -exec mv {} $BACKUPDIR/{}.$ds ;

find命令被告知查找主目录中不以.("visible")开头的所有条目。如果它们是目录,则忽略它们(不要在目录树中下降),如果它们是以f开头的文件,则将它们移动(而不是复制)到$BACKUPDIR。如果您想要任何包含f的文件,则查找模式将是*f*[137]

上面我们为备份目录定义了两个变量和一个日期戳(%之前,因为它是cron的一个特殊字符)。

文件通配符模式*[]同样被转义,因为它们是shell专用的,我们希望将它们传递给find命令。

使用时间戳的原因是经常移动或复制文件会导致无意中覆盖文件,因此如果备份目录路径不包含日期戳,则目标文件名应该包含。

最后,最好使用tar命令创建一个可以轻松复制到其他地方的带日期戳的压缩文件,本地备份目录是自找麻烦的,特别是如果嵌套在您正在工作的目录下面。

例如:像

#!/bin/bash
backup_file=~/backups/backup.$(date +%Y%m%d%H%M%S).tar.gz
tar czf $backup_file $(find ~/* -type d -prune -o -type f -name f*[137] -print)
# <Commands to copy the file elsewhere here>
# You should then copy this file elsewhere (another system) or email it to yourself (after possibly encrypting it)

最新更新