我使用 Time Machine 服务器进行备份。同时,我正在开发许多 Web 应用程序,其中项目通常由一个文件夹组成,其中包含我想要备份的应用程序文件和node_modules
我不想备份的文件夹(外部库)。换句话说,文件夹结构例如是:
projects
-- app1
---- src
---- node_modules -- I want to ignore only this folder
---- package.json
-- app2
---- whatever-else
---- node_modules -- I want to ignore only this folder
---- package.json
---- elephant.jpg
ETC。
应用程序的数量很大并且还在不断增长(目前超过 20 个),node_modules
文件夹的大小通常比项目其余部分大数千倍:大小巨大,文件数量也很多。
如何排除node_modules
整个系统中的所有文件夹(例如,.gitignore
但对于时间机器)?有没有办法通过掩码来实现?我只是不想一直手动将文件夹添加到排除文件夹中。
我还喜欢使用 cron 脚本,该脚本每 N 分钟搜索一次新文件夹并将其忽略。
有解决方案吗?
答案1
您可以node_modules
从当前路径中查找并排除所有文件夹,例如在您的主目录(~
),如下所示:
$ find `pwd` -maxdepth 3 -type d -name 'node_modules' | xargs -n 1 tmutil addexclusion
感谢@peterdemartini: https://gist.github.com/peterdemartini/4c918635208943e7a042ff5ffa789fc1
请注意,排除的文件夹不会出现在 Time Machine 系统偏好设置中或运行以下命令时:
$ defaults read /Library/Preferences/com.apple.TimeMachine.plist SkipPaths
当您使用此命令 (
tmutil addexclusion
) 时,即使您移动了排除的项目,它仍会保留在 Time Machine 排除列表中,而从 Time Machine 偏好设置窗格中排除项目则不会出现这种情况。如果您将上述命令与 -p 标志一起使用,则它不会保留,并且与您从 Time Machine 偏好设置窗格中添加的排除项相同。https://www.macworld.com/article/2033804/control-time-machine-from-the-command-line.html
答案2
恢复旧帖子,但在寻找同样的东西时,我最终尝试了这个名为阿西莫夫的工具,对我来说效果非常好。
Asimov 将扫描目录以查找node_modules
(nodeJs) 或vendor
(php composer),然后自动将其从下一次 TimeCapsule 备份中排除。它还将添加一个 cron 作业来更新这些排除。
希望这对某人有帮助。
答案3
Reddit 帖子
我发现了一个Reddit 帖子。这就是你要找的吗?
正常情况下,Time Machine 会在您插入备份驱动器时或最近一次备份后一小时(以较晚者为准)自动运行。您可以使用自己的启动守护程序实现相同的功能。您可以创建一个文件并将
/Library/LaunchDaemons/local.tmupdate.plist
其内容设置为类似以下内容。然后,您可以设置脚本
/usr/local/bin/tmupdate.sh
来清除旧的排除列表,使用新的排除列表重新创建它,然后启动备份本身:
#!/bin/sh defaults delete /Library/Preferences/com.apple.TimeMachine.plist SkipPaths mdfind 'kMDItemUserTags == "No Backup"' -0 | xargs -0 tmutil addexclusion tmutil startbackup --auto
答案4
还有忽略作者:Samuel Meuli:https://github.com/samuelmeuli/tmignore
它搜索 .gitignore 文件并将其从时间机器备份中排除。