#macos #cli #machine #mac #backup #date #time-machine

app tmlatestbackup

一个简单的 CLI 应用,用于获取最新 Mac OS Time Machine 备份的日期

3 个版本

0.1.2 2021年3月4日
0.1.1 2020年12月30日
0.1.0 2020年12月27日

#66 in #mac

自定义许可证

9KB

tmlatestbackup

一个简单的 CLI 应用,用于获取最新 Mac OS Time Machine 备份的日期。

Status

安装

推荐安装选项是使用 Homebrew,命令如下

brew install bglezseoane/tap/tmlatestbackup

您只能使用 Cargo 命令安装程序

cargo install tmlatestbackup

使用

工具的正常使用非常简单。您只需运行

tmlatestbackup

并获取最后一次 Time Machine 备份的日期,格式如下: 2018-11-21-102312

克服 Mac OS 系统完整性保护权限

如果您的当前 终端应用程序完整磁盘访问权限,并且您从那时起使用 tmlatestbackup,则工具将正常工作。如果您只想从您的终端或您使用的脚本开始使用 tmlatestbackup,则上述步骤足够了,以下步骤与您的使用场景无关。

否则,如果您想从一个脚本程序(如 launchd 代理)中使用工具,则由于系统完整性保护,工具将失败。

Mac OS 系统完整性保护阻止 tmlatestbackup,因为它尝试访问受保护的 Time Machine 功能,并且它没有继承权限(在终端中使用时继承终端授予的权限)。为了获得权限,您需要将二进制文件(/usr/local/bin/tmlatestbackup)添加到具有完整磁盘访问权限的应用程序列表中——系统偏好设置 > 安全性与隐私 > 完整磁盘访问 > 添加。

如果使用 Cargo 安装,则路径 /usr/local/bin/tmlatestbackup 可能不同。无论如何,您可以使用 which tmlatestbackup 检查它。

如果您的代理只需要运行工具而不需要其他内容,则可以将以下行添加到代理 Info.plist 中,它将正常工作(在之前指示的步骤之后)。

<key>ProgramArguments</key>
    <array>
      	<string>/usr/local/bin/tmlatestbackup</string>
    </array>

由于任何原因,要从 launchd 代理和 集成到 shell 脚本中 使用该工具,您始终需要以如下方式运行它:open -'/usr/local/bin/tmlatestbackup',而不是直接作为命令(例如:/usr/local/bin/tmlatestbackup)。也就是说,如果您使用以下代理指定...

<key>ProgramArguments</key>
    <array>
      	<string>/Users/You/scripts/script_which_calls_tmlatestbackup.sh</string>
    </array>

...您需要按如下方式运行 tmlatestbackup

# 'script_which_calls_tmlatestbackup.sh'
# ...

open -a '/usr/local/bin/tmlatestbackup'
# And not '/usr/local/bin/tmlatestbackup

# ...

当使用 open - 运行时,如果启动的应用程序失败,命令不会返回错误代码,因此为了将此步骤集成到设计良好的脚本中,建议采用以下方法

# ...

# Create temporary file to save the output of the 'open' command
TMP_OPEN_TMLATESTBACKUP_STDOUT=$(mktemp -t open_tmlatestbackup)

# Run and wait
open -W -a '/usr/local/bin/tmlatestbackup' \
	--stdout "$TMP_OPEN_TMLATESTBACKUP_STDOUT" \
	--stderr "$TMP_OPEN_TMLATESTBACKUP_STDOUT"

# Check and act attending to the process success
if ! [[ "$(cat "$TMP_OPEN_TMLATESTBACKUP_STDOUT")" \
	=~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}$ ]]
then
	>&2 echo "Error using 'tmlatestbackup'."
	rm "$TMP_OPEN_TMLATESTBACKUP_STDOUT"
	exit 1 
fi

# Clean
rm "$TMP_OPEN_TMLATESTBACKUP_STDOUT"

# ...

动机

在我的 Mac OS 机器上,有一些脚本不能作为代理运行,因为系统完整性保护阻止了这一点,它只允许授权二进制程序的权限。加上我想学习 Rust 语言的事实,这促使我编写了这个简单的程序,以便在编译程序中将冲突步骤授权,并可以优雅地维护我的脚本流程——而不是在编译语言程序中插入伪编译的 shell 脚本。然而,最终 tmlatestbackup 是一个具有潜在通用用途的程序。

依赖关系

约 170-620KB