Иногда, работая в командной строке (особенно при работе с shell-скриптами), вам может быть интересно только имя файла, но доступным для вас является полный путь к файлу.
Таким образом, необходимо разбить компонент каталога пути.
Вы будете рады узнать, что существует команда – basename – которая выполняет эту работу.
В этом уроке мы обсудим основы «basename», используя несколько простых для понимания примеров.
Но прежде чем мы перейдем к этому, стоит упомянуть, что все примеры здесь были протестированы на машине Ubuntu 16.04 LTS.
Команда basename для Linux
Команда basename позволяет отделять компоненты от имен файлов, которые не требуются.
Ниже приведен синтаксис инструмента:
basename NAME [SUFFIX] basename OPTION... NAME...
И вот что man говорит:
basename - strip directory and suffix from filenames Print NAME with any leading directory components removed. If specified, also remove a trailing SUFFIX.
Ниже приведены примеры Вопрос & Ответ, которые должны дать вам представление о том, как работает команда basename.
Вопрос 1. Как работает команда basename?
По умолчанию, если вы запустите команду «basename» с полным путем к файлу в качестве ввода, команда возвращает имя файла на выводе.
Например, когда я выполнил следующую команду:
basename /home/himanshu/Downloads/analytics.pdf
Я получил следующий результат:
analytics.pdf
Вопрос 2. Может ли basename обрабатывать несколько вводов?
Да, он может.
Но для этого вам нужно использовать опцию -a командной строки.
Например, когда я выполнил следующую команду:
basename -a /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png
я получил вывод:
analytics.pdf test.png
Вопрос 3. Как убрать расширение файла ?
Иногда вы можете захотеть получить имя файла, но не его расширение
это можно сделать, используя опцию командной строки -s (которая требует, чтобы вы передавали суффикс в качестве ввода).
Например, следующая команда:
basename -s .pdf /home/himanshu/Downloads/analytics.pdf
произвела этот результат:
analytics
Вопрос 4. Как сделать вывод каждой строки с помощью NUL?
По умолчанию символ новой строки используется как разделитель на выходе.
Однако, если вы хотите, вы можете заставить basename использовать NUL в качестве разделителя.
Это можно сделать, используя опцию командной строки -z.
Например:
basename -az /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png
И вот результат:
analytics.pdftest.png