Логотип

Использование команды 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

 

Читать  Как изменить порт SFTP в Linux

Вы также можете использовать опцию -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 для пакетного переименования файлов, но это только пример.

Читать  Лучшие диспетчеры задач для Linux

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

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 печатает весь путь, кроме последнего компонента.

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

Редактор: AndreyEx

Рейтинг: 4.5 (118 голосов)
Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала