Thank you for reading this post, don't forget to subscribe!
basename – это утилита командной строки, которая удаляет каталог и конечный суффикс из заданных имен файлов.
Использование команды basename
Команда basename поддерживает два формата синтаксиса:
1 2 3 |
basename NAME [SUFFIX] basename OPTION... NAME... |
basename берет имя файла и печатает последний компонент имени файла. При желании он также может удалить любой конечный суффикс. Это простая команда, допускающая лишь несколько параметров.
Самый простой пример – вывести имя файла с удаленными ведущими каталогами:
1 |
basename /etc/passwd |
Вывод будет включать имя файла:
1 2 |
passwd |
Команда basename удаляет все завершающие / символы:
1 |
basename /usr/local/basename /usr/local |
Обе команды выдадут одинаковый результат:
1 2 3 |
local local |
По умолчанию каждая строка вывода заканчивается символом новой строки. Чтобы завершить строки NUL, используйте опцию -z ( –zero).
Несколько входов
Команда basename может принимать несколько имен в качестве аргументов. Для этого вызовите команду с параметром -a ( –multiple), за которым следует список файлов, разделенных пробелом.
Например, чтобы получить имена файлов /etc/passwd и /etc/shadow, запустите:
1 |
basename -a /etc/passwd /etc/shadow |
1 2 3 |
passwd shadow |
Удаление конечного суффикса
Чтобы удалить любой конечный суффикс из имени файла, передайте суффикс в качестве второго аргумента:
1 |
basename /etc/hostname name |
1 2 |
name |
Обычно эта функция используется для удаления расширений файлов:
1 |
basename /etc/sysctl.conf .conf |
1 2 |
sysctl |
Другой способ удалить конечный суффикс – указать суффикс с помощью опции -s ( –suffix=SUFFIX):
1 |
basename -s .conf /etc/sysctl.conf |
1 2 |
sysctl |
Эта форма синтаксиса позволяет удалить любой конечный суффикс из нескольких имен:
1 |
basename -a -s .conf /etc/sysctl.conf /etc/sudo.conf |
1 2 3 |
sysctl sudo |
Пример
В следующем примере показано, как использовать команду basename внутри forцикла bash для переименования всех файлов, оканчивающихся на «.jpeg» в текущем каталоге, путем замены расширения файла с «.jpeg» на «.jpg»:
1 2 3 4 |
for file in *.jpeg; do mv -- "$file" "$(basename $file .jpeg).jpg" done |
Если вы используете bash в качестве оболочки, вместо вызова basenameвы можете использовать удаление завершающего расширения с помощью расширения параметров оболочки.
Команда basename удаляет любой начальный каталог и конечный суффикс из имени.