- 1
- 35
- 13
Скрипт, позволяющий очищать папку от устаревших файлов.
Может удалять файлы до определенной пользователем даты, либо удалять самые старые файлы, пока в папке не останется указанное пользователем количество файлов.
Все действия логируются в файл, находящийся в том же месте, где расположен скрипт.
Для проверки скрипта выше, прилагаю скрипт, который автоматически генерирует в указанной папке файлы с случайной датой.
Может удалять файлы до определенной пользователем даты, либо удалять самые старые файлы, пока в папке не останется указанное пользователем количество файлов.
Все действия логируются в файл, находящийся в том же месте, где расположен скрипт.
#!/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 - удаление самых старых файлов): " mode
if [ "$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 time
elif [ "$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 time
else
log_msg "Некорректный режим работы, пожалуйста, выберите 1 или 2"
echo "Некорректный режим работы, пожалуйста, выберите 1 или 2"
fi
Для проверки скрипта выше, прилагаю скрипт, который автоматически генерирует в указанной папке файлы с случайной датой.
#!/bin/bash
# Указываем путь к папке, где будут создаваться файлы
read -p "Укажите папку для создания: " folder_path
# Указываем количество файлов, которые нужно создать
read -p "Укажите кол-во файлов " num_files
# Генерируем указанное количество пустых файлов с расширением .log
for ((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