Comando dirname de Linux

Linux 命令大全Manual completo de comandos de Linux


¿Qué es el comando dirname?

dirnameEs una herramienta de línea de comandos simple pero práctica en los sistemas Linux/Unix, que se utiliza para extraer la parte del directorio de una ruta de archivo. Te ayuda a obtener rápidamente el directorio padre de una ruta sin necesidad de analizar cadenas manualmente.

Funciones básicas

  • Entrada: una cadena de ruta de archivo
  • Salida: la parte del directorio de esa ruta (es decir, el contenido después de eliminar la última barra diagonal)

Sintaxis del comando

dirname [选项] 文件名...

Descripción de parámetros

  • nombre de archivo: puede ser una o más rutas de archivo (admite rutas absolutas y relativas)
  • **...**: indica que se pueden procesar múltiples rutas de archivo al mismo tiempo

Opciones

Aunque en la mayoría de los casosdirnameno se necesitan opciones, la versión GNU admite las siguientes opciones estándar:

Opción Descripción
-z Usa el carácter NUL (\0) para separar la salida en lugar de saltos de línea
--help Muestra información de ayuda
--version Muestra información de versión

Cómo funciona

dirnameEl comando procesa la ruta mediante los siguientes pasos:

  1. Elimina todas las barras diagonales (/) al final de la ruta
  2. Elimina la última barra diagonal y todos los caracteres posteriores
  3. Si el resultado está vacío, muestra "." (directorio actual)

Diagrama de flujo de procesamiento


Ejemplos de uso

Uso básico

Ejemplo

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

$ dirname relative/path/to/file
relative/path/to

Procesar múltiples archivos

Ejemplo

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

Manejo de rutas especiales

Ejemplo

$ dirname /usr/bin/      # Presta atención a la barra diagonal final
/usr

$ dirname file.txt       # Solo nombre de archivo
.

$ dirname /              # Directorio raíz
/

Uso en scripts

Ejemplo

#!/bin/bash

# Obtener el directorio del script
SCRIPT_DIR=$(dirname "$0")
echo "Directorio del script:$SCRIPT_DIR"

# Obtener el directorio de la ruta del archivo de configuración
CONFIG_PATH="/etc/app/config.cfg"
CONFIG_DIR=$(dirname "$CONFIG_PATH")
echo "Directorio de configuración:$CONFIG_DIR"

Escenarios de uso comunes

1. Obtener el directorio del script

Ejemplo

#!/bin/bash
# Obtener la ruta absoluta del script
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
echo "Directorio del script:$SCRIPT_DIR"

2. Construir rutas relativas

Ejemplo

# Supongamos que sabemos que el archivo está en un subdirectorio de cierto directorio
BASE_DIR="/var/log"
FULL_PATH="$BASE_DIR/app/error.log"

# Obtener el directorio de registros (logs)
LOG_DIR=$(dirname "$FULL_PATH")

3. Usarlo junto con basename

Ejemplo

# Descomponer la ruta completa
FULL_PATH="/home/user/docs/report.pdf"

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

echo "Directorio:$DIR"
echo "Nombre de archivo:$FILE"

Notas importantes

Enlaces simbólicos:dirnameno resuelve enlaces simbólicos; si necesitas resolverlos, se puede combinar conreadlinkusar

Ejemplo

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

Manejo de espacios: cuando la ruta contiene espacios, asegúrate de usar comillas

Ejemplo

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

Rutas relativas: la salida mantendrá el formato de ruta relativa

Ejemplo

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

Entrada vacía: si no se proporciona ningún argumento, la versión GNU muestra ".", pero este no es el comportamiento estándar de POSIX


Comparación con comandos similares

Comando Función Entrada de ejemplo Salida de ejemplo
dirname Extrae la parte del directorio /a/b/c.txt /a/b
basename Extrae la parte del nombre de archivo /a/b/c.txt c.txt
realpath Obtiene la ruta absoluta (resuelve enlaces simbólicos) ../file /full/path/to/file

Ejercicios prácticos

Crear un archivo de prueba y obtener su ruta de directorio

Ejemplo

touch /tmp/testfile
dirname /tmp/testfile

Escribir un script que muestre el directorio donde se encuentra

Ejemplo

#!/bin/bash
echo "Este script está en:$(dirname "$0")"

Intentar procesar rutas que contengan espacios y caracteres especiales

Ejemplo

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

Linux 命令大全Manual completo de comandos de Linux

Otras extensiones