Как удалить каталог и конечный суффикс из имен файлов в Linux

12 set 2022 1 min di lettura
Как удалить каталог и конечный суффикс из имен файлов в Linux
Indice dei contenuti

Введение

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 удаляет все начальные каталоги и конечные суффиксы из имени.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.