ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Суббота, 14 декабря, 2024

Использование команды Basename в Bash Scripts

Bash Heredoc

Команда basename в Linux печатает последний компонент в пути к файлу. Это особенно полезно в скриптах bash, где вы хотите извлечь имя файла из длинного пути к файлу.

Позвольте нам показать вам несколько примеров.

 

Команда Basename

Команда basename имеет два вида синтаксиса. Первый включает суффикс :

basename PATH [suffix]

 

Второй позволяет добавить опции:

basename OPTION PATH

 

Вы не можете комбинировать опции с суффиксом. Только не смущайтесь. Следуйте примерам, и тогда вы поймете, что мы хотим сказать.

Использование команды basename с путем к файлу даст имя файла:

basename /home/user/data/filename.txt
filename.txt

 

Команда basename довольно простая на самом деле. Она действительно не распознает путь к файлу. Она просто ищет косые черты (/) и печатает все, что находится после последней косой черты.

Например, если мы запустим приведенный выше пример, удалив имя файла, вот что это даст.

basename /home/user/data
data

 

Удаление расширения файла с суффиксом

Основное использование команды bash заключается в извлечении имени файла из пути к файлу. Вы также можете удалить расширение файла при извлечении имени файла.

Просто упомяните, что вы хотите удалить в конце вывода. Допустим, вы хотите удалить .txt из filename.txt. Просто добавьте его в конец команды basename:

basename /home/user/data/filename.txt .txt
filename

 

Вы также можете использовать опцию -s для расширения:

basename -s .txt /home/user/data/filename.txt
filename

 

Расширение удаляется с конца последнего компонента ввода. Команда на самом деле не выясняет расширение файла. Если вы укажите txt (без точки) вместо .txt, вы получите «имя файла». (с точкой в конце).

Кроме того, если вы предоставите расширение, которое не находится в конце компонента, вывод останется таким, как если бы расширения не было.

basename /home/user/data/filename.txt name
filename.txt

Использование базового имени с несколькими путями

С помощью опции -a вы можете использовать несколько путей одновременно.

basename -a /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1.txt
filename2.txt

 

Вы можете использовать опцию суффикса -sс, -a, но с некоторыми ограничениями. Вы можете указать только одно расширение для всех путей к файлам.

basename -as .txt /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1
filename2

 

Вы также можете отделить вывод с помощью NULL вместо новой строки с опцией -z.

 

Использование базового имени в скрипте bash

Мы показали несколько примеров команды basename. Давайте посмотрим пару примеров basename в скриптах bash.

Предположим, у вас есть переменная пути к файлу, и вы хотите сохранить имя файла из пути в переменной. Это может быть простой скрипт:

pathname="/home/dir/data/filename"
result=$(basename "$pathname")
echo $result

 

Другой пример, где вы хотите переименовать расширения файлов. Конечно, вы можете использовать команду rename для пакетного переименования файлов, но это только пример.

Поэтому мы написали этот пример сценария с целью замены расширений файлов:

for file in *$1; do
if [ -f $file ]; then
 mv $file `basename $file .$1`.$2
fi
done

 

Вы заметили, что мы поставили галочку, если это файл или нет в скрипте bash, чтобы он не изменил соответствующий каталог?

Вы можете использовать приведенный выше скрипт следующим образом:

./myscript.sh html htm

 

И он переименует все файлы в текущем каталоге с html в конце на htm.

Это было всего лишь несколько примеров. Вы можете использовать его в соответствии с вашими требованиями.

Команда basename дополняется командой dirname. В отличие от basename, команда dirname печатает весь путь, кроме последнего компонента.

Мы надеемся, вам понравилась эта статья. Как всегда, не стесняйтесь задавать вопросы или давать предложения в разделе комментариев.

Exit mobile version