Zmiana daty i godziny utworzenia pliku w Linux/Unix
Czasami istnieje konieczność zmiany daty i godziny utworzenia jakiegoś pliku w systemie Linux/Unix
. Korzystam z tego gdy wiem, że w CRON
jest ustawione zadanie, które kasuje wybrane pliki starsze niż 30 dni. Jak mogę zatem zapobiec kasowaniu plików, które chciałbym jeszcze zachować, a nie chce przenosić ich do innej lokalizacji, czy zmieniać im nazwy?
Zacznijmy wpierw od przykładu. Zakładając, że dzisiaj jest 20 maja 2021 r.
oraz, że w katalogu logi
posiadam następujące pliki:
May 28 2020 plik-log1.txt
Jun 17 2020 plik-log2.txt
Jul 8 2020 plik-log3.txt
Sep 18 2020 plik-log4.txt
Feb 24 11:23 plik-log5.txt
Feb 24 11:28 plik-log6.txt
Feb 24 11:28 plik-log7.txt
May 10 12:53 plik-log8.txt
W CRON
dodaję zadanie które kasuje pliki starsze niż 30 dni. Robię to poniższym poleceniem:
find /logi/plik-log*.txt -mtime +30 -exec rm {} \;
Jeżeli CRON wykonałby się teraz usunąłby wszystkie pliki starsze niż 30 dni, zatem w katalogu zostałyby tylko:
Feb 24 11:23 plik-log5.txt
Feb 24 11:28 plik-log6.txt
Feb 24 11:28 plik-log7.txt
May 10 12:53 plik-log8.txt
Mi zależy, aby poniższe pliki pozostały nie ruszone. Jak zatem zapobiec usunięciu starszych plików?
Jun 17 2020 plik-log2.txt
Jul 8 2020 plik-log3.txt
Możemy zmienić datę i godzinę ich utworzenia. Aby tego dokonać skorzystamy z komendy touch
z parametrem -t
.
Jej składnia jest następująca:
touch -t YYYYMMDDHHMM.SS plik
Poszczególne parametry oznaczają:
YYYY - rok
MM - miesiąć
DD - dzień
HH - godzina
MM - minuty
SS - sekundy
Teraz możemy wskazać “własną” datę oraz godzinę utworzenia plików, niech to będzie np. 31 grudzień 2050 r.
godzina 23:59:59
. Polecenie wyglądać będzie wtedy następująco:
touch -t 205012312359.59 plik-log2.txt plik-log3.txt
Teraz, gdy wylistujemy pliki z naszego katalogu zobaczymy:
May 28 2020 plik-log1.txt
Dec 31 2050 plik-log2.txt
Dec 31 2050 plik-log3.txt
Sep 18 2020 plik-log4.txt
Feb 24 11:23 plik-log5.txt
Feb 24 11:28 plik-log6.txt
Feb 24 11:28 plik-log7.txt
May 10 12:53 plik-log8.txt
Zaś nasze polecenie kasujące pliki starsze niż 30 dni:
find /logi/plik-log*.txt -mtime +30 -exec rm {} \;
pozostawi nam pliki, dla których zmieniliśmy datę i godzinę. Zawartość katalogu wygląda teraz następująco:
Dec 31 2050 plik-log2.txt
Dec 31 2050 plik-log3.txt
Feb 24 11:23 plik-log5.txt
Feb 24 11:28 plik-log6.txt
Feb 24 11:28 plik-log7.txt
May 10 12:53 plik-log8.txt