Вы новый пользователь Linux? Предусматривает ли ваша работа в сценарии оболочки? Если ваш ответ на оба эти вопросы да, то инструмент, который мы будем обсуждать здесь, скорее всего, заинтересует вас. Название инструмента dirname, и этот инструмент в основном используется в ситуациях, когда вам нужно убрать последний компонент из абсолютного имени файла.
В этой статье мы обсудим основу dirname, а также как вы можете использовать его. Но прежде чем мы это сделаем, необходимо знать, что все примеры/инструкции, упомянутые здесь, были протестированы на Ubuntu 16,04 LTS.
Команда dirname в Linux
Ниже приводится общий синтаксис команды dirname:
dirname [OPTION] NAME ...
Вот как страница man описывает эту команду:
Вывод ИМЕНИ с его последним компонентом без косой черты и задними косыми чертами; если имя не содержит /'s, выводиться '.' (то есть текущий каталог).
Следующие примеры дадут вам лучшее представление о том, как можно использовать этот инструмент.
Q1. Сколько команда dirname работает?
Основное использование этого инструмента – просто напишите название команды, а затем абсолютное имя файла. В выходных данных, вы получите полное дерево каталогов, за исключением имени файла.
Вот пример:
root@destroyer:~# dirname /etc/cron.d/awstats /etc/cron.d
Q2. Может ли он работать с несколькими каталогами?
Да, конечно. Все, что вам нужно сделать, это указать абсолютное имя файла, одно за другим. Следующий пример показывает это:
root@destroyer:~# dirname /etc/cron.d/awstats /etc/nginx/nginx.conf /etc/nginx/vhosts/andreyex/andreyex.ru.conf /etc/cron.d /etc/nginx /etc/nginx/vhosts/andreyex
Q3. Что делать, если имя файла является абсолютным именем?
Если указано просто имя файла (а не абсолютное, в комплекте с деревом каталогов), то показывается точка (.) на выводе:
root@destroyer:/etc/nginx/vhosts/andreyex# dirname andreyex.ru.conf .
Если вы посмотрите на описание страницы man для команды(упомянутого в начале), такое поведение ясно сказано там.
Q4. Как заменить символ новой строки на NUL в выводе?
По умолчанию, строки в выводе разделены новой строкой, так как ясно это из вопроса 2 выше. Тем не менее, если вы хотите, вы можете иметь вывод, разделенный символом NUL. Для этого используйте параметр командной строки -z.
На примере этой командной строки опция в действии:
root@destroyer:/etc/nginx/vhosts/andreyex# dirname -z /etc/cron.d/awstats /etc/nginx/nginx.conf /etc/nginx/vhosts/andreyex/andreyex.ru.conf /etc/cron.d/etc/nginx/etc/nginx/vhosts/andreyexroot@destroyer:/etc/nginx/vhosts/andreyex#
Заметим, что вывод результатов больше не отделены друг от друга новой строкой.
Вывод
Команда dirname не может быть столь же навороченной, как некоторые другие команды в Linux, но и правильно было бы сказать, что это отличный инструмент, который может пригодиться при работе со сценариями оболочки. Все, что мы обсуждали здесь в значительной степени все, что предложено инструментом. В случае, если у вас есть какие – либо сомнения или запросы, оставьте комментарий ниже.