Мне нужно создать сценарий bash, который будет удалять папки, содержащие резервные копии за определенные дни. Мне нужно СОХРАНИТЬ следующее:
а) файлы \ папки, созданные в ПЯТНИЦУ @ 23:30 б) файлы \ папки, созданные в начале месяца (1 числа) c) за последние две недели
Любые предложения \ отправные точки?
Вход очень признателен ..
Томек
tmpreaper
может вам помочь.
Вы можете избежать удаления некоторых файлов с аргументом - protect
.
Если вы дадите имя своей резервной копии шаблоном вроде
<year>-<month>-<day>-<day-of-week>@<hour>:<minute>
, вы можете использовать что-то вроде:
tmpreaper [...] --protect 'FRIDAY@23:30' --protect '*-*-01-*' 14d /path/to/backups
см. http: / /manpages.ubuntu.com/manpages/zesty/man8/tmpreaper.8.html[1215 impression
Попробуйте что-нибудь с найти
. Примерно так для файлов, которые были изменены за последние 14 дней:
find . -mtime -14 -delete
Прочтите справочную страницу find , чтобы узнать больше. Есть много вариантов, которые можно использовать. Или для более конкретного случая, который вы ищете, см. Это: https://stackoverflow.com/a/158235/42580
В других ответах предлагаются способы сделать это в зависимости от времени модификации файла. Это сработает, но я хотел бы предложить совершенно другой способ сделать то, что вы пытаетесь сделать.
Создайте резервные копии в каталогах, названных после сегодняшней даты (например, каталог с именем backup-20170516
). Затем вы можете легко увидеть, какие резервные копии были сделаны и когда, и удалить каталоги для резервных копий, которые вы хотите удалить.
Это будет работать, даже если временные метки модификации файлов были изменены случайно, что может произойти, если кто-то использует прикоснитесь к команде
, или если файлы копируются из одной системы в другую без правильных параметров для сохранения дат.
Легко сгенерировать строку backup-yyyymmdd
для 14 дней назад в bash
. Подробности см. В https://stackoverflow.com/questions/13168463/using-date-command-to-get-previous-current-and-next-month
Для GNU:
# make a list of files not created on Friday at 23:30 (I would go for 23rd hour)
# also exclude files created on the first of the month
temporary_file=$(mktemp -q /tmp/$0.XXXXXX)
if [ $? -ne 0 ]; then
echo "$0: Can't create temp file, exiting..."
exit 1
fi
ls -l --time-style="+%H___%a___%d" |\
grep -v "23___Fri" |\
grep -v "___1" |\
cut -f 1 | sed -e 's,^,./,' | sort \
> $temporary_file
# Now just older than two weeks; compare with list and exclude
find . -mtime +14 | sort |\
comm -23 - $temporary_file |\
tr "\r" "\0" |\
xargs -0 -n 10 echo
rm $temporary_file
Для стиля BSD вместо --time-style = "+% H ___% a" используйте -D "+% H ___% a" и т. Д.
Если вы уверены, что это правильно, замените «echo» после xargs на «rm».