Команда basename в Linux печатает последний компонент в пути к файлу. Это особенно полезно в скриптах bash, где вы хотите извлечь имя файла из длинного пути к файлу.
Позвольте нам показать вам несколько примеров.
Команда 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.
Мы показали несколько примеров команды 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 печатает весь путь, кроме последнего компонента.
Мы надеемся, вам понравилась эта статья. Как всегда, не стесняйтесь задавать вопросы или давать предложения в разделе комментариев.