我正在创建一个自动备份系统。我计划运行一个Cron Job,每周一次,自动创建一个备份并通过电子邮件发送给一个安全的电子邮件。(这样,即使服务器爆炸成一百万件,我也会有一个最近的完整备份我的文件任何管理员都可以访问)
我找到了这个简单的方法:system('tar -cvzpf backup.tar.gz /path/to/folder');
它几乎完全符合我的需要。唯一的问题是我不希望在备份中包含一个目录。在这个网站上,用户上传自己的头像,图像所在的目录位于我要备份的目录中。因为我是通过电子邮件发送的,所以我必须保持文件夹相对较小,并添加了几千张图片。有什么方法可以告诉函数忽略这个目录,只压缩其他所有内容吗?
答案 0 :(得分:2)
find /path/to/folder -not -ipath '*baddirectory*' -print | xargs tar -cvzpf backup.tar.gz
虽然您可能会考虑将PHP的完整路径传递给您使用的所有二进制文件(在上面的命令中:find,xargs和tar)。
答案 1 :(得分:1)
来自焦油人:
tar --exclude='/path/to/folder/bad'
所以你会得到:
system('tar -czpf --exclude='/path/to/folder/bad' backup.tar.gz /path/to/folder');
你可以保留v(详细),因为你没有看到你的代码被执行。
答案 2 :(得分:0)
您可以在手册中排除--exclude-tag-all PATTERN long选项中包含的内容。 不幸的是,我没有找到关于模式的好例子。
我猜以下排除将起作用:
--exclude-tag-all=/path/foldernotinclude/.
因为它应匹配“目录”文件标记。
幸运的是,另一位用户会对使用patern进行评论。