🢂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:
- Otwórz edytor crontab:
crontab -e
- 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, orazliczba_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.