Удалять файлы старше 10 дней с помощью оболочки script в Unix
Я новичок в сценариях оболочки, может ли кто-нибудь помочь? Я хочу удалить скрипты в папке с текущей даты до 10 дней.
Сценарии выглядят так:
2012.11.21.09_33_52.script
2012.11.21.09_33_56.script
2012.11.21.09_33_59.script
script будет запускаться каждые 10 дней с помощью Crontab, поэтому мне нужна текущая дата.
Ответы
Ответ 1
find
- общий инструмент для такого рода задач:
find ./my_dir -mtime +10 -type f -delete
ПОЯСНЕНИЕ
-
./my_dir
ваш каталог (замените его собственным)
-
-mtime +10
старше 10 дней
-
-type f
только файлы
-
-delete
неудивительно. Удалите его, чтобы протестировать ваш фильтр find
перед выполнением всей команды
И будьте уверены, что ./my_dir
существует, чтобы избежать неприятных сюрпризов!
Ответ 2
Просто добавьте приведенный выше сценарий оболочки для удаления старых файлов, но с ведением журнала и подсчетом прошедшего времени
#!/bin/bash
path="/data/backuplog/"
timestamp=$(date +%Y%m%d_%H%M%S)
filename=log_$timestamp.txt
log=$path$filename
days=7
START_TIME=$(date +%s)
find $path -maxdepth 1 -name "*.txt" -type f -mtime +$days -print -delete >> $log
echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> $log
... code for backup ...or any other operation .... >> $log
END_TIME=$(date +%s)
ELAPSED_TIME=$(( $END_TIME - $START_TIME ))
echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> $log
echo "Elapsed Time :: $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) " >> $log
Код добавляет несколько вещей.
- файлы журналов с именами временных меток
- указана папка журнала
- find ищет файлы *.txt только в папке журнала
- тип f гарантирует, что вы удаляете только файлы
- maxdepth 1 гарантирует, что вы не входите в подпапки
- файлы журнала старше 7 дней удаляются (при условии, что это журнал резервного копирования)
- отмечает время начала/окончания
- вычисляет истекшее время для операции резервного копирования...
Примечание: для проверки кода просто используйте -print вместо -print -delete. Но все же тщательно проверяйте свой путь.
Примечание: убедитесь, что время вашего сервера установлено правильно с помощью даты - установите часовой пояс /ntp правильно. Дополнительно проверьте время файла с помощью "имени файла статистики"
Примечание: mtime можно заменить на mmin для лучшего контроля, поскольку mtime отбрасывает все дроби (старше 2 дней (+2 дней) фактически означает 3 дня), когда оно имеет дело с получением временных отметок файлов в контексте дней
-mtime +$days ---> -mmin +$((60*24*$days))
Ответ 3
Если вы можете позволить себе работать через данные файла, вы можете сделать
find -mmin +14400 -delete