创建并制作 Ubuntu Web 服务器后,我需要创建一个脚本,将一个特定目录与 /var/www 同步,并将之前位于 /var/www 中的内容移动到具有增量更新的备份文件夹。我考虑在服务器的某个位置放置一个 bck 文件夹,并在运行脚本后自动在其中创建具有增量名称的文件夹。如何创建一个脚本,在第一次运行时创建一个名为 bck/backup1 的文件夹,在第二次运行时创建一个名为 bck/backup2 的文件夹,等等?
答案1
您可能知道,我们这里不按需编写脚本。您需要做功课并花一些时间(半天)了解一些 bash 和如何编写脚本。但是,如果您非常幸运,仍然会有人为您提供量身定制的脚本。
请注意,您想要的大部分内容可以通过一个命令来实现,rsync
可以rsync
进行复制,并且在后续复制中,它将仅传输已更改的文件和新文件,并且可以选择--delete
删除目标中不再存在于源中的文件。
如果源和目标文件系统都支持所有 Linux 文件属性和权限,则以下命令将创建原始文件的“镜像副本”。目标将包含来自源的所有文件,并具有相同的时间戳和所有权:
rsync -av <source> <destination>
其中,显然<source>
和<destination>
分别是源目录和目标目录的路径名。
看看man rsync
。它有一个--backup-dir
选项,允许创建一个备份目录,其中包含目标中文件的先前版本(然后仅包含已更改的文件)。
另一种方法是使用选项维护完整备份副本,例如,如您所建议的bck/backup1
。这样,rsync 将链接目标上具有bck/backup2
--link-dest
不是更改为备份副本中的同一文件。这样,您就有了整个目录结构的多个副本,但是,未更改的文件只占用一次空间。然后,您可以将 的内容移出/var/www
到您的,并根据您的“特定目录”在命令行中bck/backup1
重新创建 的内容/var/www
rsync -av --delete --link-dest=bck/backup1 <your_specific_directory>/ /var/www
这要求两者/var/www
和备份都位于同一卷上 - 硬链接不能跨卷。
如果备份需要放在不同的卷上,那么您将需要 1)/var/www
在不同的卷上创建备份(其中不同版本的文件可以硬链接),然后 2)/var/www
使用您的“特定目录”进行更新(如果源和目标位于同一卷上,也可以使用 --link-dest)。