Jestem kompletnym noobem w Linuksie, ale zaczynam rozumieć. Mam Ubuntu Server 16.04 z serwerem FTP do tworzenia kopii zapasowych plików bezpieczeństwa. Pliki zostaną zapisane w folderach, takich jak: /home/securityfolder1
, /home/securityfolder2
, /home/securityfolder3
i tak dalej.
Pamiętaj, że każdy securityfolderN
jest innym użytkownikiem.
Ponieważ nie chcę, aby moje dyski twarde były cały czas zapełnione, chcę codziennie usuwać w tych folderach pliki starsze niż 7 dni.
files
cron
delete
automation
Jacco van de Wijgaart
źródło
źródło
/home
zazwyczaj zawiera podfolder dla każdego użytkownika. Jeśli nie chcesz przechowywać kopii zapasowych jako różnych użytkowników (niezbyt dobry pomysł), powinieneś rozważyć inną lokalizację, np./home/security/backup1
I tak dalej.Odpowiedzi:
Po pierwsze, to polecenie znajdzie i usunie wszystkie pliki starsze niż 7 dni w dowolnym podkatalogu,
/home
którego nazwa zaczyna się odsecurityuser
:Potrzebujesz,
-mtime +6
a nie+7
dlatego, że-mtime
liczy 24-godzinne okresy. Jak wyjaśniono w-atime
częściman find
(-mtime
działa w ten sam sposób):Tak więc, aby znaleźć plik, który został zmodyfikowany 7 lub więcej dni temu, musisz znaleźć pliki, które zostały zmodyfikowane ponad 6 dni temu
-mtime +6
.Następnym krokiem jest uruchomienie tego polecenia raz dziennie. Ponieważ każdy
securityuserN
jest innym użytkownikiem (być może zechcesz przemyśleć tę konfigurację, wszystko komplikuje się), należy to uruchomić jako root. Więc edytuj/etc/crontab
:I dodaj tę linię:
Spowoduje to uruchomienie
find
polecenia raz dziennie i usunięcie plików.źródło
find '/home/securityuser/*' -mtime +6 -type f -delete
(przy wszystkich istotnych i odpowiednich zmianach w tworzeniu użytkowników) może być ogólnie lepszym pomysłem niżfind '/home/securityuser*' -mtime +6 -type f -delete
(bez cięcia na ścieżce) ...?/home/securityuserN
, więc bez ukośnika nie można ich znaleźć.-name
:find /home/ -name 'securityuser*' -mtime +6 -type f -delete
'securityuser*'
. Symbol wieloznaczny powinien być rozwinięty przez powłokę, a nie przezfind
, więc powinien byćsecurityuser*
(bez cudzysłowów). Zobacz zaktualizowaną odpowiedź. Dzięki za zwrócenie uwagi, Stelio, nie mogę uwierzyć, że nikt wcześniej tego nie zauważył! Ti vlakas!zgodnie z moją wiedzą:
spróbuj wykonać następujące
find
polecenie:źródło
find /home/jacco/ -mtime +1 -type f -delete
i wydaje się, że działa. Jak mogę to zautomatyzować?#!/bin/bash
i kod pod nim? czy naprawdę jestem tutaj głupi?find '/u*' -name local
. Takie dyrektywy-name "foo*"
powinny być cytowane, gdy zawierają znaki globalne.