Добавить в корзинуПозвонить
Найти в Дзене
Old Programmer

Уроки по языку программирования bash от Old Programmer. Часть 2. Number 1

Доброго времени суток на канале Old Programmer. Канале о программировании и программистах. Сегодня продолжение разговора о программировании на языке bash. Несколько полезных ссылок для вас Программирование на языке bash. Команда find Начинаю вторую часть моей серии уроков по программированию на bash. В программировании на языке bash очень важную роль играет использование команд операционной системы. Сисадминские скрипты в значительной степени состоят из использования таких команд, которых в Linux бессчетное множество. В данной части я хотел бы рассмотреть некоторые из таких команд. Сегодня остановлюсь на незаменимой команду find. Нет, конечно, в одном из уроков я показал как на bash программно можно обходить дерево каталогов и можно взять эту программу в качестве шаблона, но над самими критериями придется в некоторых случаях усердно поработать. А с помощью find это можно сделать очень быстро. Кроме того, используя конвееризацию можно значительно усилить возможности поиска. Воз

Доброго времени суток на канале Old Programmer. Канале о программировании и программистах. Сегодня продолжение разговора о программировании на языке bash.

Несколько полезных ссылок для вас

Язык программирования bash. Ссылки на ресурсы
Old Programmer29 марта 2022
Список разделов канала Old Programmer, канала о программировании и программистах
Old Programmer27 мая 2021
Программирование и в шутку и всерьез

Программирование на языке bash. Команда find

Начинаю вторую часть моей серии уроков по программированию на bash. В программировании на языке bash очень важную роль играет использование команд операционной системы. Сисадминские скрипты в значительной степени состоят из использования таких команд, которых в Linux бессчетное множество. В данной части я хотел бы рассмотреть некоторые из таких команд.

Сегодня остановлюсь на незаменимой команду find. Нет, конечно, в одном из уроков я показал как на bash программно можно обходить дерево каталогов и можно взять эту программу в качестве шаблона, но над самими критериями придется в некоторых случаях усердно поработать. А с помощью find это можно сделать очень быстро. Кроме того, используя конвееризацию можно значительно усилить возможности поиска.

Возможности команды find просто огромны. Достаточно посмотреть мануал man find. Но мы остановимся на некоторых важных моментах, а затем приведем пример программного использования команды в bash скрипте.

1. Команда find изначально заточена на рекурсивный поиск. Поэтому если не ограничивать глубину рекурсии, то поиск пойдет на всю глубину.

find /home - поиск начиная от каталога /home и по всей глубине дерева.

find /home -maxdepth 1 поиск только в указанном каталоге

2. Разумеется можно указывать шаблон поиска с помощью ключа -name.

find /home/admin -maxdepth 2 -name "*.cfg"

При этом шаблон можно инвертировать

find /home/admin -maxdepth 2 -not -name "*.cfg"

При этом шаблоны можно и перечислять

find /home/admin -maxdepth 2 -name "g*" -not -name "*.cfg"

Впрочем, можно указывать несколько каталогов поиска

3. Команда позволяет использовать множество других критериев: по типу (-type), по маске разрешения (-perm), по группам пользователей (-user), по датам (-mtime, -atime, -ctime), по размеру файлов (-size).

4. В команде имеется механизм, позволяющий запуск команду для каждого найденного элемента, это опция -exec.

find /home -maxdepth 1 -name "admin*" -type d -exec ls -la {} \;

Команда выводит содержимое каталогов «admin*» в каталоге /home с полной информацией о каждом элементе. Для этого мы подключили команду ls с помощью опции -exec.

Рассмотрим следующую задачу. Дано два каталога. Необходимо из первого каталога скопировать во второй те файлы, которые были модифицированы за последние 60 минут. При этом присвоить им новые имена, состоящие из старого имени и даты-времени данного действия. Имена первого и второго каталога будут задаваться в командной строке.

Ниже представлена программа, выполняющая это действие.

Несколько пояснений.

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

2. Переменной td присваивается текущая дата — время. date - команда вызова даты-времени. Структура, используемая в определении td позволяет задать формат вывода.

3. ${t##*/} - данное выражение позволяет отбросить в строке все что слева от последней косой черты в строке вместе с этой чертой. Запомним эту «фишку», очень удобную для получения короткое имя файла из его длинного имени.

Пока все. Программируем на bash и получаем удовольствием.

До встречи на канале Old Programmer.

Linux forever
Linux forever

#программирование #программисты #bash #linux #языки программирования