Команда basename позволяет задействовать одноименную утилиту, предназначенную для получения имени директории или файла на основе полного пути к соответствующему элементу файловой системы. Также она поддерживает суффиксы и позволяет получать имена файлов без расширений. Данная команда полезна для использования в рамках сценариев и является достаточно простой.
Базовый синтаксис команды выглядит следующим образом:
$ basename [параметр] путь-к-файлу-или-директории [суффикс]
Утилита поддерживает ряд параметров и может обрабатывать по нескольку путей к файлам и директориям одновременно. Параметр -s позволяет передать суффикс для исключения из результирующего имени файла или директории, если вас не устраивает передача суффикса после пути к файлу или директории. Параметр -a позволяет передать утилите сразу несколько путей к файлам и директориям для обработки. Параметр -z позволяет выводить нулевые символы вместо символов перехода на следующую строку в процессе вывода имен файлов и директорий для последующей обработки.
Для получения имени файла на основе пути к нему достаточно передать утилите basename путь к этому файлу без каких-либо параметров:
$ basename /home/alex/text.txt
text.txt
Следует обратить внимание на то, что утилита по своей сути является обработчиком строк и не требует наличия файлов или директорий с передаваемыми ей именами на дисках.
Для того, чтобы вывести имя файла без расширения, достаточно передать утилите расширение в качестве суффикса:
$ basename /home/alex/text.txt .txt
text
Аналогичный эффект может быть достигнут путем передачи расширения посредством соответствующего параметра утилиты:
$ basename -s .txt /home/alex/text.txt
text
В случае директорий нет никаких отличий — следует передать утилите имя директории без каких-либо параметров:
$ basename /home/alex/
alex
Для обработки нескольких путей к файлам и директориям достаточно использовать параметр -a и передать утилите пути к соответствующим элементам файловой системы, разделив их пробелами:
$ basename -a /home/alex/ /home/alex/text.txt
alex
text.txt
В данном случае не удастся передать утилите суффиксы, к примеру, для удаления расширений файлов.