Давайте кодить на bash

  • Привет!
    Для полноценного и удобного использования всего форумного функционала рекомендуем зарегистрироваться на игровом сервере и форуме, после чего привязать игровой аккаунт к форумному.
  • Привет!
    Мы открыли возможность переноса аккаунта с MyHome RolePlay на Pears Project! Подробнее читай здесь.

CHRK

Активный участник
34
127
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 - удаление самых старых файлов): " 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
 
Круто! Спасибо! Давно хотел именно этот скрипт на баше!!!!!!!!!!!!!