🢂Usuwanie starych plików i folderów za pomocą skryptu bash i crontab

Poniżej skrypt w Bash (i kilka innych przykładów), który usuwa pliki i foldery starsze niż określona liczba dni.

Każdy administrator systemu lub zaawansowany użytkownik Linuxa zna problem związany z gromadzeniem się starych i nieużywanych plików w systemie (w tym kopii zapasowych). Automatyzacja procesu usuwania tych plików nie tylko oszczędza czas, ale także pomaga utrzymać porządek i sprawność systemu. Poniżej skrypt bash który w tym pomaga.

Wersja w oparciu o skrypt bash

Krok 1: Tworzenie Skryptu Bash

Stwórz plik skryptu Bash, który usunie pliki i foldery starsze niż podana liczba dni w określonym folderze. Skrypt przyjmie dwa argumenty: ścieżkę do folderu i liczbę dni.

#!/bin/bash

# Sprawdzenie czy podano dwa argumenty
if [ $# -ne 2 ]; then
  echo "Użycie: $0 <ścieżka_do_folderu> <liczba_dni>"
  exit 1
fi

FOLDER=$1
DNI=$2

# Sprawdzenie czy podany folder istnieje
if [ ! -d "$FOLDER" ]; then
  echo "Folder $FOLDER nie istnieje."
  exit 1
fi

# Usunięcie plików i folderów starszych niż podana liczba dni
find "$FOLDER" -type f -mtime +$DNI -exec rm -f {} \;
find "$FOLDER" -type d -mtime +$DNI -exec rm -rf {} \;

echo "Pliki i foldery starsze niż $DNI dni zostały usunięte z $FOLDER."

Zapisz ten skrypt jako clean_old_files.sh i nadaj mu prawa do wykonania:

chmod +x clean_old_files.sh

Krok 2: Dodanie zadania cron

Aby ustawić zadanie cron, które będzie uruchamiać ten skrypt automatycznie, wykonaj następujące kroki:

  1. Otwórz edytor crontab:
    crontab -e
  2. Dodaj wpis do crontab, aby uruchamiać skrypt codziennie (lub w innej wybranej częstotliwości). Na przykład, aby uruchamiać skrypt codziennie o północy:
    0 0 * * * /pełna/ścieżka/do/skryptu/clean_old_files.sh /ścieżka/do/czyszczonego/folderu liczba_dni

    Zamień /pełna/ścieżka/do/skryptu/clean_old_files.sh na pełną ścieżkę do skryptu Bash, /ścieżka/do/czyszczonego/folderu na ścieżkę do folderu, w którym chcesz usuwać pliki, oraz liczba_dni na liczbę dni, po której pliki i foldery mają być usuwane.

Przykład

Załóżmy, że skrypt jest zapisany w /home/user/scripts/clean_old_files.sh, chcesz usuwać pliki z /home/user/old_files, które są starsze niż 30 dni, i chcesz uruchamiać skrypt codziennie o północy. W takim przypadku wpis w crontab będzie wyglądał następująco:

0 0 * * * /home/user/scripts/clean_old_files.sh /home/user/old_files 30

Wersja zmodyfikowana

Możemy dostosować skrypt, aby nazwa folderu i ścieżka były zapisane jako zmienne na początku skryptu. Poniżej znajduje się zaktualizowany skrypt:

#!/bin/bash

# Ustawienia - zmienne
FOLDER="/ścieżka/do/folderu"  # Zmień na właściwą ścieżkę do folderu
DNI=30  # Zmień na właściwą liczbę dni

# Sprawdzenie czy podano dwa argumenty
if [ $# -ne 2 ]; thenZ czasem takie pliki mogą zajmować cenną przestrzeń dyskową, co może prowadzić do problemów z wydajnością.
  echo "Użycie: $0 <ścieżka_do_folderu> <liczba_dni>"
  exit 1
fi

# Sprawdzenie czy podany folder istnieje
if [ ! -d "$FOLDER" ]; then
  echo "Folder $FOLDER nie istnieje."
  exit 1
fi

# Usunięcie plików i folderów starszych niż podana liczba dni
find "$FOLDER" -type f -mtime +$DNI -exec rm -f {} \;
find "$FOLDER" -type d -mtime +$DNI -exec rm -rf {} \;

echo "Pliki i foldery starsze niż $DNI dni zostały usunięte z $FOLDER."

Wersja w oparciu o find z opcją -delete

Otwórz edytor crontab i dodaj polecenie, które usunie pliki i foldery starsze niż 30 dni w folderze /kopie/system_backup/

0 0 * * * find /kopie/system_backup/ -mtime +30 -delete

Polecenie find z opcją -delete nie będzie pytało o zgodę na usunięcie plików i folderów. Jest to operacja bezpośrednia i nieinteraktywna, co oznacza, że polecenie to usunie znalezione pliki i foldery bez żadnych dodatkowych komunikatów lub potwierdzeń.

Uważaj: Należy zachować ostrożność i upewnić się, że parametry są poprawne, aby uniknąć przypadkowego usunięcia ważnych danych.

Kiedy używać i jakiej wersji?

Obie metody mają swoje miejsce w zarządzaniu systemem:

  • Skrypt Bash: Lepszy dla bardziej złożonych zadań, które wymagają dodatkowej logiki, walidacji, lub logowania.
  • Polecenie find z opcją -delete: Idealne dla prostych, jednoliniowych zadań, które nie wymagają dodatkowej logiki. Wybór metody zależy od Twoich konkretnych potrzeb i stopnia skomplikowania zadania.