Сценарий для удаления определенных папок в зависимости от времени

Мне нужно создать сценарий bash, который будет удалять папки, содержащие резервные копии за определенные дни. Мне нужно СОХРАНИТЬ следующее:

а) файлы \ папки, созданные в ПЯТНИЦУ @ 23:30 б) файлы \ папки, созданные в начале месяца (1 числа) c) за последние две недели

Любые предложения \ отправные точки?

Вход очень признателен ..

Томек

-1
задан 16 May 2017 в 15:31
4 ответа

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

1
ответ дан 5 December 2019 в 19:42

Попробуйте что-нибудь с найти . Примерно так для файлов, которые были изменены за последние 14 дней:

find . -mtime -14 -delete

Прочтите справочную страницу find , чтобы узнать больше. Есть много вариантов, которые можно использовать. Или для более конкретного случая, который вы ищете, см. Это: https://stackoverflow.com/a/158235/42580

0
ответ дан 5 December 2019 в 19:42

В других ответах предлагаются способы сделать это в зависимости от времени модификации файла. Это сработает, но я хотел бы предложить совершенно другой способ сделать то, что вы пытаетесь сделать.

Создайте резервные копии в каталогах, названных после сегодняшней даты (например, каталог с именем backup-20170516 ). Затем вы можете легко увидеть, какие резервные копии были сделаны и когда, и удалить каталоги для резервных копий, которые вы хотите удалить.

Это будет работать, даже если временные метки модификации файлов были изменены случайно, что может произойти, если кто-то использует прикоснитесь к команде , или если файлы копируются из одной системы в другую без правильных параметров для сохранения дат.

Легко сгенерировать строку backup-yyyymmdd для 14 дней назад в bash . Подробности см. В https://stackoverflow.com/questions/13168463/using-date-command-to-get-previous-current-and-next-month

0
ответ дан 5 December 2019 в 19:42

Для 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».

0
ответ дан 5 December 2019 в 19:42

Теги

Похожие вопросы