Команда basename

Команда 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

В данном случае не удастся передать утилите суффиксы, к примеру, для удаления расширений файлов.