Como criar um script launchd com um registro de data e hora?

1

Estou tentando executar um script launchd simples que copia um arquivo de um diretório para outro quando o arquivo é alterado, mas quero colá-lo com um registro de data e hora exclusivo para que eu possa fazer a versão dos arquivos. Meu script de inicialização parece com o seguinte:

<?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>

O comando funciona perfeitamente se eu o executar através do Terminal, por exemplo, se eu executar:

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

No entanto, sempre que o evento é acionado, ele cria um arquivo com (gdate +% Y% m% d% T% N) string em vez da data real, ou seja, o operador de data não resolve quando executado por meio de launchd.

Eu sempre poderia criar um executável e executá-lo através do launchd, mas eu estava me perguntando por que o acima não funciona corretamente.

Obrigado pela ajuda!

    
por philosopher 06.11.2017 / 05:20

1 resposta

1

Aqui está a solução. Pesquisando com as palavras corretas no Google é tudo.

<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>
    
por 06.11.2017 / 05:45