A maneira mais fácil seria fazer isso diretamente através de cron
. Por exemplo, para copiar o arquivo uma vez por semana, crie um crontab assim:
@weekly cp "$(ls -t /path/to/source | head -1)" /path/to/target
DETALHES:
O sinal -t
de ls
significa classificar por hora, portanto, imprimindo apenas o primeiro arquivo ( head -1
), sei que estou obtendo o mais novo. A execução de ls -t /path/to/source | head -1
retornará o arquivo mais recente no diretório /path/to/source
, então cp "$(ls -t /path/to/source | head -1)" /path/to/target
copiará o arquivo mais recente de source
para target
. As aspas ao redor da expressão são necessárias para lidar com nomes de arquivos que contenham espaços.
Wikipedia explica que
Cron is the time-based job scheduler in Unix-like computer operating systems. Cron enables users to schedule jobs (commands or shell scripts) to run periodically at certain times or dates. It is commonly used to automate system maintenance or administration.
[...]
Cron is driven by a crontab (cron table) file, a configuration file that specifies shell commands to run periodically on a given schedule.
Para criar um novo crontab, abra um terminal e execute
crontab -e
Isso iniciará seu editor padrão ( $EDITOR
) e apresentará um arquivo de texto. Cole a linha acima nesse arquivo, salve e saia e pronto, seu crontab foi criado.
O formato do crontabs é (tirado de aqui ):
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
Então, por exemplo, para executar cp /foo /bar
às 14:35 de 12 de outubro, você escreveria:
35 14 12 11 cp /foo /bar
O daemon cron
também entende alguns comandos abreviados, como:
string meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
Assim, o crontab que eu dei acima significa que o comando cp
é executado uma vez por semana à meia-noite do domingo de manhã.