Chcę okresowo uruchamiać skrypt, który kopiuje tylko ostatnio edytowany plik z jednego katalogu do drugiego. Jak to zrobić za pomocą skryptu powłoki w systemie OSX?
Najłatwiej byłoby to zrobić bezpośrednio cron
. Na przykład, aby skopiować plik raz w tygodniu, utwórz tabelę crontab w następujący sposób:
@weekly cp "$(ls -t /path/to/source | head -1)" /path/to/target
DETALE:
-t
Flaga ls
pomocą sortować wg czasu, więc przez drukowanie tylko pierwszy plik ( head -1
) Wiem, że jestem coraz najnowszy. Uruchomienie ls -t /path/to/source | head -1
zwróci najnowszy plik z katalogu, /path/to/source
więc cp "$(ls -t /path/to/source | head -1)" /path/to/target
skopiuje najnowszy plik z source
do target
. Cudzysłowy wokół wyrażenia są potrzebne, aby radzić sobie z nazwami plików zawierającymi spacje.
Wikipedia mówi , że
Cron jest opartym na czasie harmonogramem zadań w komputerowych systemach operacyjnych typu Unix. Cron umożliwia użytkownikom planowanie zadań (poleceń lub skryptów powłoki) uruchamianych okresowo w określonych godzinach lub terminach. Jest powszechnie stosowany do automatyzacji konserwacji lub administracji systemu.
[...]
Cron jest sterowany przez plik crontab (tablica cron), plik konfiguracyjny, który określa polecenia powłoki uruchamiane okresowo zgodnie z określonym harmonogramem.
Aby utworzyć nowy plik crontab, otwórz terminal i uruchom
crontab -e
Spowoduje to uruchomienie domyślnego edytora ( $EDITOR
) i wyświetlenie pliku tekstowego. Wklej powyższą linię do tego pliku, zapisz i wyjdź, i to wszystko, twoja crontab została utworzona.
Format crontabs jest (wzięty stąd ):
* * * * * 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)
Na przykład, aby uruchomić o cp /foo /bar
godz. 14:35 12 października, napisz:
35 14 12 11 cp /foo /bar
cron
Demon rozumie również pewne skrótowym poleceń, takich jak:
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 * * * *".
Tak więc crontab, który podałem powyżej, oznacza uruchamianie cp
polecenia raz w tygodniu o północy w niedzielę rano.