Muszę usunąć pliki starsze niż 3 dni z zadaniem cron w 3 różnych katalogach. (te 3 katalogi są potomkami katalogu nadrzędnego /a/b/c/1
i /a/b/c/2
& /a/b/c/3
) Czy można tego dokonać za pomocą jednego wiersza w pliku crontab?
źródło
Muszę usunąć pliki starsze niż 3 dni z zadaniem cron w 3 różnych katalogach. (te 3 katalogi są potomkami katalogu nadrzędnego /a/b/c/1
i /a/b/c/2
& /a/b/c/3
) Czy można tego dokonać za pomocą jednego wiersza w pliku crontab?
Jest to dość łatwe (choć należy pamiętać, że czas ten zmienia się ponad 3 dni temu, ponieważ czas tworzenia jest dostępny tylko w niektórych systemach plików ze specjalnymi narzędziami):
find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete
Usuń #
przed, -delete
gdy masz pewność, że znajdzie pliki, które chcesz usunąć.
Aby uruchomić go przez crona, prawdopodobnie po prostu utworzę skrypt wykonywalny (dodaj shebang - #!bin/sh
do górnej linii pliku i uczynię go wykonywalnym chmod a+x
), a następnie umieści go w odpowiednim cron
katalogu, takim jak /etc/cron.daily
lub /etc/cron.weekly
. Oczywiście pod warunkiem, że nie potrzebujesz bardziej szczegółowego harmonogramu i że te katalogi istnieją w Twojej dystrybucji.
Jak zauważono poniżej, -delete
opcja find
nie jest zbyt przenośna. Podejście zgodne z POSIX to:
find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +
Ponownie usuń, #
gdy masz pewność, że masz odpowiednie pliki.
Cytat z komentarza Stéphane Chazelas poniżej:
Pamiętaj, że
-exec rm {} +
ma podatności na warunki wyścigowe, których-delete
(jeśli są dostępne) nie mają. Nie używaj go więc w katalogach, które inni mogą zapisywać. Niektóre znaleziska mają również narzędzie,-execdir
które ogranicza luki w zabezpieczeniach.
/a/b/c/
nie trzeba było określać dla każdej opcji?/a/b/c/[12]
, ale jest to naprawdę odpowiednie, jeśli podkatalogi mają nazwy jednoliterowe. Wbash
was może zrobić/a/b/c/{1,2}
. Oczywiście musiałaby to być linia bang dla skryptu#!/bin/bash
lub jeśli używasz crontab, musisz upewnić się, że jest skonfigurowany do używaniabash
(naprawdę nie polecam go zmieniać, jeśli nie jest).ksh
,bash
azsh
także mają operatorów naprzemiennych w swoich globach. Pamiętaj, że-exec rm {} +
ma podatności na warunki wyścigowe, których-delete
(jeśli są dostępne) nie mają. Nie używaj go więc w katalogach, które inni mogą zapisywać. Niektóre znaleziska mają również narzędzie,-execdir
które ogranicza luki w zabezpieczeniach.rm -f
obsługuje błędów po cichu, a tym samym radzi sobie z ewentualnymi warunkami wyścigu-exec
?Lepiej byłoby użyć
tmpwatch
źródło
tmpwatch
został rozwidlonytmpreaper
, co wydaje się (przynajmniej na Debianie) zastępstwem.