Команда dirname в Linux

Linux 命令大全Справочник команд Linux


Что такое команда dirname?

dirnameЭто простой, но практичный инструмент командной строки в системах Linux/Unix, используемый для извлечения части пути, соответствующей каталогу, из пути к файлу. Он помогает быстро получить родительский каталог пути без ручного разбора строк.

Основная функциональность

  • Ввод: строка пути к файлу
  • Вывод: часть пути, соответствующая каталогу (т.е. то, что остаётся после удаления последней косой черты и всего, что после неё)

Синтаксис команды

dirname [选项] 文件名...

Описание параметра

  • filename: может быть один или несколько путей к файлам (поддерживаются абсолютные и относительные пути)
  • **...** : означает, что несколько путей к файлам можно обрабатывать одновременно

Параметры

Хотя в большинстве случаевdirnameопции не требуются, версия GNU поддерживает следующие стандартные опции:

Опция Описание
-z Использовать символ NUL (\0) для разделения вывода вместо символов новой строки
--help Показать справочную информацию
--version Показать информацию о версии

Как это работает

dirnameКоманда обрабатывает пути, выполняя следующие шаги:

  1. Удалить все завершающие косые черты (/) из пути
  2. Удалить последнюю косую черту и все символы после неё
  3. Если результат пуст, вывести "." (текущий каталог)

Блок-схема обработки


Примеры использования

Базовое использование

Пример

$ dirname /home/user/docs/file.txt
/home/user/docs

$ dirname относительный/путь/к/файлу
относительный/путь/к

Обработка нескольких файлов

Пример

$ dirname /a/b/c.txt /x/y/z.txt
/a/b
/x/y

Специальная обработка путей

Пример

$ dirname /usr/bin/      # Обратите внимание на завершающий слэш
/usr

$ dirname file.txt       # Только имя файла
.

$ dirname /              # Корневой каталог
/

Использование в скриптах

Пример

#!/bin/bash

# Получить каталог скрипта
SCRIPT_DIR=$(dirname "$0")
echo "Каталог скрипта:$SCRIPT_DIR"

# Получить каталог из пути к файлу конфигурации
CONFIG_PATH="/etc/app/config.cfg"
CONFIG_DIR=$(dirname "$CONFIG_PATH")
echo "Каталог конфигурации:$CONFIG_DIR"

Типичные случаи использования

1. Получить каталог скрипта

Пример

#!/bin/bash
# Получить абсолютный путь каталога скрипта
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
echo "Каталог скрипта:$SCRIPT_DIR"

2. Построение относительных путей

Пример

# Предположим, мы знаем, что файл находится в подкаталоге определённого каталога
BASE_DIR="/var/log"
FULL_PATH="$BASE_DIR/app/error.log"

# Получить каталог логов
LOG_DIR=$(dirname "$FULL_PATH")

3. Использование с basename

Пример

# Разложить полный путь
FULL_PATH="/home/user/docs/report.pdf"

DIR=$(dirname "$FULL_PATH")
FILE=$(basename "$FULL_PATH")

echo "Каталог:$DIR"
echo "Имя файла:$FILE"

Примечания

Символические ссылки:dirnameОн не разрешает символические ссылки; если вам нужно их разрешить, можно объединить сreadlinkиспользовать

Пример

dirname "$(readlink -f "/path/with/symlink")"

Обработка пробелов: Когда путь содержит пробелы, обязательно используйте кавычки

Пример

dirname "/path/with spaces/file.txt"

Относительные пути: Вывод останется в форме относительного пути

Пример

$ dirname ../parent/file.txt
../parent

Пустой ввод: Если аргументы не указаны, версия GNU выводит ".", но это не стандартное поведение POSIX


Сравнение с аналогичными командами

Команда Функция Пример входных данных Пример вывода
dirname Извлечь часть с каталогом /a/b/c.txt /a/b
basename Извлечь часть с именем файла /a/b/c.txt c.txt
realpath Получить абсолютный путь (разрешить символические ссылки) ../file /full/path/to/file

Практические упражнения

Создайте тестовый файл и получите путь к его каталогу

Пример

touch /tmp/testfile
dirname /tmp/testfile

Напишите скрипт, который выводит свой собственный каталог

Пример

#!/bin/bash
echo "Этот скрипт находится в:$(dirname "$0")"

Попробуйте обработать пути с пробелами и специальными символами

Пример

mkdir -p "/tmp/my dir"
touch "/tmp/my dir/special file.txt"
dirname "/tmp/my dir/special file.txt"

Linux 命令大全Справочник команд Linux

Другие расширения