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