- 36
- 145
- 33
Скрипт, позволяющий очищать папку от устаревших файлов.
Может удалять файлы до определенной пользователем даты, либо удалять самые старые файлы, пока в папке не останется указанное пользователем количество файлов.
Все действия логируются в файл, находящийся в том же месте, где расположен скрипт.
Для проверки скрипта выше, прилагаю скрипт, который автоматически генерирует в указанной папке файлы с случайной датой.
Может удалять файлы до определенной пользователем даты, либо удалять самые старые файлы, пока в папке не останется указанное пользователем количество файлов.
Все действия логируются в файл, находящийся в том же месте, где расположен скрипт.
#!/bin/bash# Проверяем существование файла лога и создаем его, если он не существуетlog_file="DelLog_$(date +'%Y.%m.%d_%H-%M-%S').log" sudo touch "$log_file" # Функция для записи в файл логаlog_msg() { echo "$(date) $1" >> "$log_file" }# Выбор режима работыread -p "Выберите режим работы (1 - удаление данных до определенной даты, 2 - удаление самых старых файлов): " modeif [ "$mode" == "1" ]; then # Удаление данных до определенной даты режим log_msg "Выбран режим удаления данных до определенной даты." # Пользователь вводит путь к папке read -p "Введите путь к папке: " directory ls -la $directory --sort time log_msg "Выбрана папка $directory" # Пользователь вводит дату в формате YYYY-MM-DD read -p "Введите дату в формате YYYY-MM-DD: " date # Проверяем, существует ли указанная папка if [ ! -d "$directory" ]; then echo "Указанная папка не существует" log_msg "Выбрана неверная папка." exit 1 fi # Удаляем файлы, созданные до указанной даты find "$directory" -type f ! -newermt "$date" -exec sudo rm {} \; echo "Удаление файлов до $date завершено" log_msg "Удалены файлы до $date" ls -la $directory --sort timeelif [ "$mode" == "2" ]; then # Удаление самых старых файлов до определенного количества режим log_msg "Выбран режим удаления самых старых файлов до определенного количества." # Пользователь вводит путь к папке read -p "Введите путь к папке: " directory log_msg="Выбрана папка $directory" ls -la $directory --sort time# Пользователь вводит количество файлов для удаления read -p "Введите количество файлов, которое останется после удаления: " file_count # Проверяем, существует ли указанная папка if [ ! -d "$directory" ]; then log_msg "Указанная папка $directory не существует" echo "Указанная папка не существует" exit 1 fi # Удаляем старые файлы пока количество файлов в папке не будет равно file_count while [ "$(ls -A "$directory" | wc -l)" -gt "$file_count" ]; do oldest_file=$(ls -t "$directory" | tail -1) rm "$directory/$oldest_file" log_msg "Удален файл: $oldest_file" done log_msg="В папке осталось $file_count файлов, остальные удалены" echo "Удаление самых старых файлов завершено, папка содержит $file_count файлов" ls -la $directory --sort timeelse log_msg "Некорректный режим работы, пожалуйста, выберите 1 или 2" echo "Некорректный режим работы, пожалуйста, выберите 1 или 2" fiДля проверки скрипта выше, прилагаю скрипт, который автоматически генерирует в указанной папке файлы с случайной датой.
#!/bin/bash# Указываем путь к папке, где будут создаваться файлыread -p "Укажите папку для создания: " folder_path# Указываем количество файлов, которые нужно создатьread -p "Укажите кол-во файлов " num_files# Генерируем указанное количество пустых файлов с расширением .logfor ((i=1; i<=$num_files; i++))do # Генерируем случайную дату от 2000 года до 2024 года random_year=$(shuf -i 2000-2024 -n 1) random_month=$(shuf -i 1-12 -n 1) random_day=$(shuf -i 1-28 -n 1) # Учитывая февраль random_timestamp=$(date -d "$random_year-$random_month-$random_day" +%s) # Создаем файл с расширением .log touch "$folder_path/file_$i.log" # Меняем дату создания файла touch -d@"$random_timestamp" "$folder_path/file_$i.log" done