首先:我不知道这是否是提问的正确地方,请在您删除我的帖子之前告诉我我应该去哪里,那就太好了,谢谢!
我想要做什么(以及我的选择是什么):
我有一个 synology NAS,它可以执行一些任务(是的,我是菜鸟),这些任务是“linux 命令”。我的目标是将我的整个网络空间或其上的特定文件夹备份到 NAS,但只备份新的或更改的文件(就像它与 git 一起工作一样)。
我无法使用 SSH 密钥(我认为这是最好的方法),因为我无法在我的 NAS 上正确设置它们(这是可能的,但我缺乏知识,尽管如果您能帮助我我将不胜感激,但这对我来说太复杂了,我读了很多东西,但就是不起作用,所以我尝试了不使用 SSH 密钥的方法(至少这样我可以稍微了解一下发生了什么))。
所以我的伪代码将是这样的:
- 将 NAS 连接到网络空间
- 转到我的特定文件夹(在我的情况下,FTP 登录已仅限于该文件夹,因此我们可以跳过该步骤)
- 在我的 NAS 上创建一个文件夹/或导航到该文件夹(它已经存在)
- 首次克隆网络空间文件夹中的所有内容
- 对整个文件夹进行 gzip 压缩,并按日期命名
- 再次执行时,脚本应该只检查是否有任何文件已被更改,并且只更新文件、下载新文件或删除旧文件(因此我的每个 zip 文件都将是一个完全正常工作的网络空间,没有任何不必要的文件)
- 现在我的主文件夹已与网络空间同步,并再次压缩
我目前拥有的:
lftp -u MY-FTP-USERNAME,MY-FTP-PASSWORD MY-WEBSPACE-URL 'mirror /test'
tar -zcvf /volume1/BACKUPS/backup-$(date +%Y-%m-%d-%H-%M-%S).tar.gz /volume1/BACKUPS/MY-WEBSPACE-NAME/
rm -rf /volume1/BACKUPS/MY-WEBSPACE-NAME/
其中存在一些问题:
- 每次都会下载整个网络空间,因为我无法让“仅新文件”这个功能正常工作。文件大小不是问题,但这些小文件太多了,需要很长时间,而且会阻塞 NAS 的资源
- 由于某种原因,解压后 gzip 包含完整路径
/volume1/BACKUPS/MY-WEBSPACE-NAME/
,只有最后一个文件夹中才包含我的文件。我只想将MY-WEBSPACE-NAME
包含我的文件的文件夹压缩。
如果你能帮我解决这个问题,我将不胜感激。不一定非要这样lftp
,我也试过了,wget
但也没用。所以只要有用,就去做吧。上次我做这件事已经是不久前了,但如果我记得没错的话,我不能用了,git
但我不知道为什么了
答案1
对于问题 1,如果您使用的是 GNU tar(您可能正在使用),则可以使用--after-date=date
或选项。您可以使用类似或或 的-N date
表达式- 请小心使用正确的引号。据说格式对 GNU tar 有点依赖于版本(不过我还没有遇到问题),因此如果一个格式不起作用,那么其他格式中至少有一个应该可以。--after-date='2 days ago'
tar --newer 20210601
-N '2021-06-01 12:00:00'
您也可以使用路径(以“/”开头!)代替日期。在这种情况下,tar 将仅存储在该文件修改时间之后修改或创建的文件。如果您将备份保存在 /volume1/BACKUPS 中,则可以使用“-N /volume1/BACKUPS/name-of-your-latest-backup”。
对于问题 2,最简单的方法是使用带有-C
选项的 tar,如下所示:
tar -zcvf /volume1/BACKUPS/backup-$(date +%Y-%m-%d-%H-%M-%S).tar.gz -C /volume1/BACKUPS/MY-WEBSPACE-NAME/ .
这指示 tar “cd” 到/volume1/BACKUPS/MY-WEBSPACE-NAME/
当前目录(“。”,现在是 ),然后 tar 当前目录(“。”)/volume1/BACKUPS/MY-WEBSPACE-NAME/
。
答案2
如果我理解了你想要做什么,我建议你使用一个允许你以版本化方式存档所有文件的程序,以便始终保留所有文件,例如使用 ZPAQ 技术。使用类似“tar-snapshot-enabled”的软件。
如果我理解正确的话,你的网络空间被 Synology NAS 当作文件夹“挂载”了,对吗?不确定,因为我已经移植到了 QNAP 而不是 Synology(PS 无法评论,声誉仍然不够)