Reddit 帖子

Reddit 帖子

我使用 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 文件并将其从时间机器备份中排除。

相关内容