Как сделать так, чтобы скрипт launchd создал файл с отметкой времени?

286
philosopher

Я пытаюсь запустить простой скрипт 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

1 ответ на вопрос

1
philosopher

Вот решение. Поиск по правильным ключевым словам в 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> 

Похожие вопросы