NAS Synology автоматическое удаление старых файлов через bash скрипт

Продолжаем изучать и применять основные и часто используемые команды. Для лучшего понимания этой части, советую сначала проделать основные команды Bash. часть 1, и только потом приступать ко 2 части заданий.

Что именно является символической ссылкой?

Обычно называемые symlink(символической ссылкой) или soft link(мягкой ссылкой), символические ссылки представляют собой очень маленькие файлы. На самом деле символическая ссылка содержит только имя любого файла, на который она указывает, обычно вместе с путем к файловой системе (относительно текущего местоположения или абсолютного значения).

Если файл с именем file1 указывает на файл с именем /apps/files/file-2020, длина file1 будет составлять 21 символ, даже если размер файла file-2020 составляет 2 терабайта. Если он указывает на ./file-2020, длина его будет всего 11 символов. Если указывает на file-2020, то только девять.

Если вы выполните команду, подобную «vi file1» (где file1 — имя символической ссылки), вы в конечном итоге отредактируете любой файл, на который указывает file1, а не содержимое самой символической ссылки. Системы Linux знают, как работать с символическими ссылками, и просто делают правильные вещи. Точно так же, если вы используете такие команды, как cat, more, head или tail, вы будете просматривать содержимое указанного файла.

Если вы удалите символическую ссылку, с другой стороны, вы удалите ссылку, а не ссылочный файл. Опять же, Linux делает то, что имеет смысл. Симлинки предназначены для упрощения использования и обмена файлами — не более того.

Advanced bash

[[ > [

[ (команда «test») и [[ (новый тест) используются для вычисления выражений. [[ работает только в Bash, Zsh и Korn shell. Также он более мощный. [ доступен в POSIX shells.

Читайте также:  Релиз дистрибутива Ubuntu 20.04 LTS

#POSIX [ «$variable» ] || echo ‘переменная не задана или пуста’ [ -f «$filename» ] || printf ‘Файла (обычного) нет: %s\n’ «$filename» if [[ ! -e $file ]]; then echo «Файла нет, лидо он не доступен: $file» fi if [[ $file0 -nt $file1 ]]; then printf ‘файл %s новее %s\n’ «$file0» «$file1» fi

Короче говоря, в bash мы используем [[ ]] — он новее, быстрее и т.д. Если имеем какую-нибудь старую POSIX-совместимую Unix оболочку, то используем [ ]. По большей части синтаксис [[ ]] и [ ] схож.

# Унарные операции [[ -d $file ]] # файл типа директория [[ -e $file ]] # файл любого типа (проверка на существование (exists)) [[ -f $file ]] # обычный файл [[ ! -f $file ]] # не (обычный файл). «!» — отрицание [[ -z $var ]] # истина, когда переменная пуста (zero) [[ -n $var ]] # ложь , когда переменная пуста (nonzero) [[ -r $file ]] # файл существует и доступен для чтения [[ -w $file ]] # файл существует и доступен для запись [[ -x $file ]] # догадайтесь сами # Сравнение строк (лексикографический порядок) [[ a < b ]] [[ dog > cat ]] [[ sh = sh ]] [[ bash != sh ]] # Сравнение чисел [[ 5 -lt 10 ]] # less than [[ 100 -gt 99 ]] # greater than [[ 5 -eq 05 ]] # equal [[ 50 -ne 05 ]] # not equal # Логические операции [[ -n $var && -f $var ]] # переменная определеня и есть файл, указанный в ней. [[ $(pwd) == $HOME || $(pwd) == ‘/’ ]] # мы в директории $HOME или в корне. # Сравнение с шаблоном [[ $(pwd) == $HOME/* ]] # мы в поддиректории домашней папки или в ней # Регулярные выражения [[ $(date) =~ ^пятница ]] && echo Сегодня пара по ОСям

printf

printf — везде!

Его можно найти в bash, C, C++, python, perl, php, …

По сути — форматированный вывод. Рассмотрим варианты шаблонов вывода:

Читайте также:  Как защитить браузер от взлома — 5 способов

%c Символ %d Десятичное целое число со знаком %i Десятичное целое число со знаком %e Научный формат (строчная буква е) %Е Научный формат (прописная буква Е) %f Десятичное число с плавающей точкой %g В зависимости от того, какой формат короче, применяется либо %e, либо %f %G В зависимости от того, какой формат короче, применяется либо %E, либо %f %o Восьмеричное число без знака %s Строка символов %u Десятичное целое число без знака %x Шестнадцатеричное число без знака (строчные буквы) %X Шестнадцатеричное число без знака (прописные буквы) %% Знак %

Хех, не всё так просто!

  • Например, спецификатор %05d заполнит нулями пустующие позиции поля вывода, если количество цифр в целом числе, подлежащем выводу, будет меньше пяти.
  • Например, форматный код % выведет на экран число, у которого количество цифр не превышает 10, четыре из которых размещаются после десятичной точки.
  • На­пример, спецификатор % выравнивает число с двумя знаками после точки по левому краю поля, состоящего из 10 позиций.

Немного примеров:

printf «%s\n» «Hello world» # Вывести строку с переводом строки printf «%.2f рублей» 2,3333333 # «2,33 рублей» printf «\e[1;34m%.3d\e[0m\n» 42 # Вывести жирным синим цифры

Не успели. Всё же 2 пары за одну… Успели бы без ответов на вопросы. Но это не наш путь!

  • awk
  • раскраска вывода
  • sed

Команды консоли Ubuntu

В Ubuntu команды используются для выполнения разных задач. Посмотреть список всех команд и дополнительную информацию вы можете в документации Ubuntu.

Мы рассмотрим основные команды терминала Ubuntu, с которыми сталкивается каждый пользователь:

Команда ls

Отображает список всех файлов и папок в той директории, в которой вы находитесь.

Команда cd

Переходит в другую указанную директорию или папку.

Команда cp

Копирует файлы и папки в любое место файловой системы.

Команда mv

Перемещает файлы и папки в любое место файловой системы.

Команда rm

Удаляет файлы и папки.

Читайте также:  Вышла iOS 10 beta 2 для iPhone и iPad: что нового?

Команда mkdir

Создаёт новую пустую директорию.

Команда cat

Отображает содержимое файла в консоли.

Команда nano и команда vim

Открывают текстовые редакторы nano и vim, в которых можно редактировать файл прямо в консоли.

Пишем скрипт для планировщика задач Synology

Для написания скрипта будем использовать команду FIND, так как у неё очень гибкие возможности. Если есть желание более подробно с ней ознакомится, то не составит труда эту информацию найти через поисковик. 😎 Я для вас подготовил небольшую фичу для формирования скрипта (смотрите ниже). Пример скрипта планировщика Synology:

Скопировать

find /volume1//ИМЯ_ДИРЕКТОРИИ/ -mmin +10080 -delete

Верхний скрипт удаляет ☕ только файлы, а если вам необходимо удалить директории вместе с файлами старше N дней, то вам необходим скрипт ниже

find /volume1//ИМЯ_ДИРЕКТОРИИ/ -type d -mmin +10080 -exec rm -rf {} \;

Почему в минутах? Точно не знаю почему, но -mtime +7 никак не хотел работать. Выводилась ошибка:

find: `+7′: No such file or directory

Настройка расписания скрипта удаления старых файлов с NAS Synology

И так. Скрипт есть, осталось дело за малым — настройка планировщика задач. Заходим на NAS Synology и далее в раздел Панель управления 👉🏻 Планировщик задач 👉🏻 Создать 👉🏻 Запланированная задача 👉🏻 Скрипт, заданный пользователем Даём имя скрипту в основной вкладке, а затем вставляем сгенерированный ранее нами скрипт в поле Скрипт, заданный пользователем по вкладке Настройки задач. Теперь настраиваем расписание через вкладку Расписание (логично же 😂). Думаю там у вас вопросов не возникнет, а если вдруг, то пишите в комментарии!

Панель управления NAS SynologyРасписание задачи

Если вы затрудняетесь на каком у вас разделе лежит та или иная папка общего доступа, то вы можете посмотреть тут: Панель управления 👉🏻 Папка общего доступа. Там под названием каждого каталога будет указано на каком разделе он находится!

Заключение

Вот и всё! Вы за 5 минут настроили скрипт удаления старых файлов с NAS сервера Synology по расписанию. Было просто.