复制/停止过去14天内修改过的文件

Sar*_*mal 4 linux bash shell cron find

我有一个服务器,其文件每次都被修改.

我们想要一个每7天运行一次的脚本或cron作业,找到在过去14天内修改或创建的任何php文件,并将它们放在服务器上的tar或zip文件中,以便下载.

此命令查找正确的文件:

find . -name "*.php" -mtime -14 -print
Run Code Online (Sandbox Code Playgroud)

我还需要做什么?

wis*_*ent 6

如果你的find输出文件列表是正确的,只需将它传递给tar:

find . -name "*.php" -mtime -14 -print | xargs tar cvf backup.tar
Run Code Online (Sandbox Code Playgroud)

你应该检查man中的tar选项.您可能希望使用例如-p(保留权限),只需在man中查找有用的选项并使用您需要的任何内容.

并将它添加到cron,如果你的发行版支持它,最简单的方法是将你的脚本放入:

/etc/cron.weekly
Run Code Online (Sandbox Code Playgroud)

否则你必须修改crontab:

crontab -e
Run Code Online (Sandbox Code Playgroud)

并在那里放一条线:

0 3 * * 6 <user> <your script>
Run Code Online (Sandbox Code Playgroud)

它在每个星期六凌晨3点运行一个脚本,最后一个脚本是星期几,0或7是星期日.

男人5 crontab:

 field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7  is  Sun,  or  use
          names)
Run Code Online (Sandbox Code Playgroud)


dst*_*erg 5

cron很好.

你可能想要GNU tar的--files-from; xargs在这里很危险.如果已知文件的数量总是很小,则xargs很好,但如果文件列表变大,则xargs重新启动tar将覆盖除最后n个文件之外的所有文件.

  • 我也鼓励使用--files-from,并且您还应该使用`-print0`代替`-print`,并为`tar`使用相应的选项`-null`。完整示例:`find . -name "*.php" -mtime -14 -print0 | tar -acf /path/to/backup.tgz --null --files-from=-`。 (2认同)