Самоучитель по команде basename в Linux для начинающих (с примерами)

Иногда при работе в командной строке (особенно при работе с shell-скриптами) вас может интересовать только имя файла, а вам доступен только полный путь к нему. Поэтому требуется удалить компонент пути, связанный с каталогом.

Утилита, используемая для извлечения базового имени из пути к файлу или каталогу, эффективно удаляя все ведущие компоненты каталога и необязательные суффиксы. При предоставлении полного пути basename возвращает только имя файла или последний сегмент пути, что делает ее полезной в сценариях и задачах манипулирования файлами. Например, если указан путь /home/user/document.txt, базовое имя вернёт document.txt. Кроме того, пользователи могут указать суффикс, который нужно удалить, например .txt, оставив только документ. Эта команда упрощает работу с именами файлов и путями в сценариях, повышая автоматизацию и оптимизируя различные процессы управления файлами.

В этом руководстве мы расскажем об основах ‘basename’ на понятных примерах. Но прежде чем мы перейдем к этому, стоит отметить, что все приведенные здесь примеры были протестированы на машине Ubuntu 24.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.

Ниже приведено несколько примеров в стиле Q&A, которые должны дать вам представление о том, как работает команда basename.

Q1. Как работает команда basename?

По умолчанию, если вы выполняете команду ‘basename’ с полным путем к файлу в качестве входных данных, команда возвращает имя файла в выходных данных. Например, когда я выполнил следующую команду:

basename /home/himanshu/Downloads/analytics.pdf

я получил следующий результат:

analytics.pdf

Q2. Может ли basename обрабатывать несколько входов?

Да, может. Но для этого необходимо использовать параметр командной строки -a. Например, когда я выполнил следующую команду:

basename -a /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png

И вот какой результат я получил:

analytics.pdf
test.png

Q3. Как сделать так, чтобы расширение файла также отображалось в basename?

Иногда требуется получить только имя файла, но не его расширение. Это можно сделать с помощью параметра командной строки -s (который требует передачи суффикса в качестве входных данных).

Например, следующая команда:

basename -s .pdf /home/himanshu/Downloads/analytics.pdf

выдает следующее сообщение:

analytics

Q4. Как сделать так, чтобы вывод каждой строки заканчивался NUL?

По умолчанию в качестве разделителя при выводе используется символ новой строки. Однако при желании вы можете заставить basename использовать NUL в качестве разделителя. Это можно сделать с помощью опции командной строки -z.

Например:

basename -az /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png

И вот результат:

analytics.pdftest.png

Таким образом, вы не видите здесь символа NUL. Вам нужно перенаправить вывод в файл, а затем открыть этот файл в редакторе, например vim. Вот что показал vim:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *