如何让 launchd 脚本创建带有时间戳的文件?

如何让 launchd 脚本创建带有时间戳的文件?

我正在尝试运行一个简单的 launchd 脚本,当文件更改时,该脚本会将文件从一个目录复制到另一个目录,但我想使用唯一的时间戳粘贴它,以便对文件进行版本控制。我的 launchd 脚本如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>change.file.copy</string>
    <key>ProgramArguments</key>
    <array>
        <string>cp</string>
        <string>/path/to/folder/sample_file.txt</string>
        <string>/path/to/another_folder/$(gdate +%Y%m%d_%T.%N)_sample_file.txt</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/path/to/folder/sample_file.txt</string>
    </array>
</dict>
</plist>

如果我通过终端运行该命令,它就可以正常工作,即如果我运行:

cp /path/to/folder/sample_file.txt /path/to/another_folder/$(gdate +%Y%m%d_%T.%N)_sample_file.txt

但是,每当事件触发时,它都会创建一个包含(gdate + %Y%m%d_%T.%N)字符串而不是实际日期的文件,即日期运算符在通过 launchd 运行时无法解析。

我总是可以创建一个可执行文件并通过 launchd 运行它,但我想知道为什么上述操作不能正常工作。

谢谢您的帮助!

答案1

解决方案如下。在 Google 上使用正确的关键字进行搜索至关重要。

<key>ProgramArguments</key>
<array>
    <string>bash</string>
    <string>-c</string>
    <string>cp /path/to/folder/sample.txt /path_to_another_folder/$(/usr/local/bin/gdate +%Y%m%d_%T.%N)_sample.txt</string>
</array>

相关内容