Jak skopiować tylko jeden plik (najnowszy) z katalogu przy użyciu skryptu powłoki w systemie Mac OS X?

0

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?

Blueberryfields
źródło

Odpowiedzi:

4

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:

-tFlaga lspomocą sortować wg czasu, więc przez drukowanie tylko pierwszy plik ( head -1) Wiem, że jestem coraz najnowszy. Uruchomienie ls -t /path/to/source | head -1zwróci najnowszy plik z katalogu, /path/to/sourcewięc cp "$(ls -t /path/to/source | head -1)" /path/to/targetskopiuje najnowszy plik z sourcedo 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 /bargodz. 14:35 12 października, napisz:

35    14   12      11    cp /foo /bar

cronDemon 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 cppolecenia raz w tygodniu o północy w niedzielę rano.

terdon
źródło