basename — это утилита командной строки, которая удаляет каталог и конечный суффикс из заданных имен файлов.
Содержание
Использование команды 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
host
Обычно эта функция используется для удаления расширений файлов:
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 вы можете использовать удаление конечного расширения с помощью расширения параметров оболочки .
Выводы
Команда basename удаляет любой начальный каталог и конечный суффикс из имени.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Спасибо за объяснение!