Команда dirname в Linux печатает путь к файлу с удаленным последним компонентом. Это в основном дает вам путь к каталогу из пути к файлу.
destroyer@andreyex: ~$ dirname /home/andreyex/upload/andreyex.jpg /home/andreyex/upload destroyer@andreyex: ~$
Это особенно полезно в скриптах bash, где вы хотите извлечь путь к каталогу из длинного пути к файлу.
Команда dirname дополняет команду basename. Команда basename извлекает имя файла из пути, в то время как dirname извлекает путь к каталогу.
Команда dirname имеет простой синтаксис.
dirname OPTION PATH
Использование команды dirname с абсолютным путем к файлу даст путь к каталогу:
dirname /home/user/data/filename.txt /home/user/data
Как и команда basename, команда dirname на самом деле примитивна. Она действительно не распознает путь к файлу. А просто ищет косые черты (/) и печатает все, что есть до последней косой черты. По сути, вы можете задать ему любую строку с / в ней, и она будет работать с ней.
Например, мы используем случайную строку без имени файла. Вы можете видеть, что он все еще работает так же, и выводит строку, удаляя последний / и текст после него.
destroyer@andreyex: ~$ dirname dir1/dir2/dir3/dir4 dir1/dir2/dir3 destroyer@andreyex: ~$
Если в пути нет косой черты (/), будет выведена точка (.), Означающая текущий каталог.
destroyer@andreyex: ~$ dirname andreyex.txt . destroyer@andreyex: ~$
Вы также можете использовать dirname с несколькими путями. Он вернет вывод для каждого пути в новой строке:
destroyer@andreyex: ~$ dirname dir1/file dir2/file dir1 dir2 destroyer@andreyex: ~$
Вы можете использовать опцию -z, чтобы получить результат в одной строке с выводами, разделенными символом NULL.
Мы показали несколько примеров команды dirname. Давайте поговорим об использовании dirname в скриптах bash.
Предположим, у вас есть переменная пути к файлу, и вы хотите получить путь к каталогу, в котором находится файл. Это может быть простой скрипт:
pathname="/home/dir/data/filename" result=$(dirname "$pathname") echo $result
Как мы упоминали ранее, команда dirname дополняется командой basename. В отличие от dirname, команда basename печатает только последний компонент пути.
Мы надеемся, вам понравилась эта статья. Как всегда, не стесняйтесь задавать вопросы или давать предложения в разделе комментариев.