Jak zmusić mój system do usunięcia wszystkich plików z określonego katalogu starszego niż określony czas, zachowując jednocześnie strukturę katalogów?

12

Mam katalog na swoim komputerze, myślę o nim jak o własnym tmpkatalogu, ale jest on w moim ~katalogu. Chcę to zrobić, aby mój system co 3 godziny usuwał wszystkie pliki (choć zachowuje nienaruszoną strukturę katalogów, ale wciąż rekurencyjnie usuwa wszystkie pliki na wszystkich poziomach katalogów) z tego katalogu, który jest starszy niż jeden dzień.

Używam Ubuntu GNOME 15.10 z GNOME 3.18, czy można to zrobić? A jeśli tak, to w jaki sposób? Chciałbym, aby było to w pełni zautomatyzowane bez potrzeby interakcji użytkowników. Powinno to być coś uruchamianego automatycznie po zalogowaniu, więc nie muszę uruchamiać czegoś przy każdym uruchomieniu.


źródło

Odpowiedzi:

21

Używanie find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp to katalog, który ma być przeszukiwany rekurencyjnie, zmień go odpowiednio

  • -type f będzie szukał tylko plików

  • -mtime +0 który będzie pasował do pliku, jeśli był ostatnio modyfikowany co najmniej jeden dzień temu

  • -delete po prostu usunie dopasowane pliki

Tutaj jest haczyk -mtime +0, większość może pomyśleć o użyciu, -mtime +1ale findzignoruje każdy ułamek czasu podczas obliczania dni. Dopasuje -mtime +1plik, jeśli ostatnia modyfikacja została dokonana co najmniej 2 dni temu.

Cytując man find, -mtimema tę samą konwencję rozrządu -atime:

-atime n

Ostatni dostęp do pliku n * 24 godziny temu. Kiedy dowiesz się, ile okresów 24-godzinnych poprzednio uzyskano dostęp do pliku, jakakolwiek część ułamkowa jest ignorowana, więc aby dopasować -atime +1, należy uzyskać dostęp do pliku co najmniej dwa dni temu.

Pamiętaj też, że jeśli chcesz precyzji, powinieneś spojrzeć na -mminopcję findwskazania czasu w minutach.

Aby uruchamiać go okresowo po 3 godzinach, możesz dodać cronwpis.

Uruchom crontab -ei dodaj:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

Używając zshdo usunięcia plików:

rm ~/tmp/**/*(.-m+0)

Dodawanie do cron:

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'
heemayl
źródło
6

Powinieneś być w stanie usunąć wszystkie pliki starsze niż 1 dzień /home/username/directoryi wszystkie katalogi poniżej za pomocą:

find /home/username/directory -type f -mtime +1 -delete

Aby zaplanować to polecenie co trzy godziny, ustaw je jako zadanie CRON:

crontab -e

Następnie wewnątrz crontab:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

Które uruchamia twoje polecenie co trzy godziny w ciągu godziny (tj. Minuta 0), więc 3:00, 6:00 itd.

Przejdź do croni, crontab manpagesaby uzyskać więcej informacji na ich temat.

Limecat
źródło
4
Ta odpowiedź jest rzeczywiście nieprawidłowa, zobacz drugą odpowiedź .
4
Ponieważ ta odpowiedź jest błędna i nie mówi nic więcej niż druga odpowiedź, popraw ją tak, aby była poprawna i lepsza niż druga odpowiedź, lub usuń ją.
5
@ParanoidPanda Rozumiem, że chcesz wysokiej jakości odpowiedzi, ale dwukrotne komentowanie tego samego jest raczej niepotrzebne i może być postrzegane jako agresywne, szczególnie dla nowego użytkownika.
RPiAwesomeness,
2
@RPiAwesomeness: Cóż, skomentowałem po raz drugi, ponieważ zabrakło mi czasu na edycję pierwszego komentarza, a także chciałem powiedzieć, że powinni usunąć swoją odpowiedź, co może niekoniecznie było zrozumiane z mojego pierwszego komentarza, chociaż ja nie chciałem, żeby czuli się atakowani, i tak jak mówiłem, że dali złą odpowiedź i teraz muszą ją usunąć, więc dodałem trochę o poprawie. Ale widzę, jak można to potraktować w niewłaściwy sposób, więc proszę pamiętać: Panda staje się agresywna tylko wtedy, gdy zabierasz jego bambus. ;-)