Удалять файлы старше 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