通过正则表达式 (?) 从时间机器备份中排除文件夹

smn*_*brv 26 time-machine macos

我使用 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
Run Code Online (Sandbox Code Playgroud)

等等。

应用程序的数量很大并且还在增长(目前超过 20 个),node_modules文件夹的大小通常比项目的其余部分大数千倍:大小很大,文件也很多。

如何排除node_modules整个系统中的所有文件夹(例如.gitignore但对于时间机器)?有没有办法通过面具做到这一点?我只是不想一直手动将文件夹添加到排除的文件夹中。

我也可以使用 cron 脚本每 N 分钟搜索一次新文件夹并使它们被忽略。

有解决方案吗?

Gia*_* P. 19

您可以node_modules从当前路径中查找并排除所有文件夹,例如在您的主目录 ( ~) 中,如下所示:

$ find `pwd` -maxdepth 3 -type d -name 'node_modules' | xargs -n 1 tmutil addexclusion
Run Code Online (Sandbox Code Playgroud)

感谢@peterdemartini:https ://gist.github.com/peterdemartini/4c918635208943e7a042ff5ffa789fc1

请注意,排除的文件夹不会出现在 Time Machine 系统偏好设置中或运行以下命令时:

$ defaults read /Library/Preferences/com.apple.TimeMachine.plist SkipPaths
Run Code Online (Sandbox Code Playgroud)

当您使用此命令 ( tmutil addexclusion) 时,即使您移动它,您排除的项目仍保留在 Time Machine 排除列表中,而当您从 Time Machine 首选项面板中排除项目时,情况并非如此。如果您使用带有 -p 标志的上述命令,则它不会是粘性的,并且与您从 Time Machine 首选项窗格中添加的排除项相同。

https://www.macworld.com/article/2033804/control-time-machine-from-the-command-line.html

  • 如果您想查看被忽略内容的详尽列表,可以运行`sudo mdfind“com_apple_backup_excludeItem = 'com.apple.backupd'”`(归功于https://apple.stackexchange.com/questions/25779/on- os-x-what-files-are-exclusion-by-rule-from-a-time-machine-backup/25833#25833) (3认同)
  • 摆脱“maxdepth”并在“node_modules”之后添加“-prune”会更好 (2认同)

Dam*_*ien 8

恢复旧帖子,但在寻找相同的东西时,我最终尝试了这个名为 Asimov 的工具,它对我来说非常有用。

Asimov 将扫描目录以查找node_modules(nodeJs) 或vendor(php composer),然后从下一次 TimeCapsule 备份中自动排除。它还将添加一个 cron 作业来更新这些排除项。

希望这可以帮助某人。


Hyd*_*n14 4

红迪网帖子

我发现了一个Reddit 帖子。这是您要找的吗?

正常情况下,时间机器会在插入备份驱动器时自行运行,或者在最近一次备份后一小时(以最后发生者为准)运行。您可以使用自己的启动守护程序来实现同样的目的。您将在以下位置创建一个文件 /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
Run Code Online (Sandbox Code Playgroud)