Linux удаляет файлы старше 2 недель И (день месяца) % 14 != 0

Я создаю резервную копию своей базы данных каждый день.

Для сохранения на жестком диске, как я могу удалить файлы старше 2 weeks И (day of month) % 14 != 0 из скрипта оболочки?

Итак, я ищу команду типа find / -mtime +14 -exec rm {} \; с добавлением не удалять файлы, созданные 14-го или 28-го числа любого месяца.

Я хочу иметь ежедневные резервные копии последние 2 недели и раз в 2 недели (почти) после этого?

PHP-код в цикле будет таким:

$mtime = filemtime($file); // Last modified date of file (created)
$day_mtime = date('j', $mtime); // Day of month (1-31)
$two_weeks_ago = time() - 60 * 60 * 24 * 14;

if ($mtime < $two_weeks_ago && $day_mtime % 14 != 0) {
    // Delete file older than 2 weeks 
    // AND not modified not 14'th nor 28'th day of month
}

person Kristian    schedule 16.11.2012    source источник
comment
Зачем усложнять. Начните с поиска всего, что было создано 14 или 28 числа, и скопируйте его в 2-недельный и 4-недельный архив соответственно.   -  person Rolf of Saxony    schedule 24.08.2015


Ответы (1)


Это эквивалент bash. Несколько замечаний при переходе с php на bash:

  • В bash $ означает "значение...", поэтому mtime - это переменная, а $mtime - это значение переменной.
  • Обозначение $(...) означает запуск команды в скобках и захват ее вывода. Таким образом, $(stat -c %Y $file) заменяется выводом stat -c %Y $file
  • Вокруг операторов присваивания не должно быть пробелов a=b работает, a = b нет

    mtime=$(stat -c %Y $file)
    day_mtime=$(date -d@$mtime +%d)
    two_weeks_ago=$(date -d '2 weeks ago' +%s)
    mod_14_day=$(expr $day_mtime 14)
    if [ $mtime -lt $two_weeks_ago ] && [ $mod_14_day -eq 0 ] ; then
    fi
    
person Devon_C_Miller    schedule 16.11.2012
comment
Хорошо, на самом деле я искал, как написать этот php-код для bash. Я искал команду типа find / -mtime +14 -exec rm {} \;, но с добавлением (week of day) % 14 != 0 - person Kristian; 16.11.2012
comment
Да, % 14 — это такой особый случай, что вы не найдете ничего, что делало бы это «из коробки» в Linux (или, возможно, на любой другой платформе). Вы можете использовать find для загрузки приведенного выше сценария, чтобы уменьшить список файлов-кандидатов, но % 14 нужно будет выполнить с помощью пользовательского кода. - person Devon_C_Miller; 17.11.2012