Listar un directorio con la ruta completa

Cuando listamos los ficheros de un directorio con ls, por defecto, nos devuelve los nombres de los ficheros, pero no su ruta, por lo que si necesitamos la ruta completa al fichero, a veces es engorroso.

Pero lo podemos solucionar con el modificador -d, aunque si lo ejecutamos sin indicarle un directorio, nos devuelve un punto:

$ ls -d 
.

Si queremos la ruta de los ficheros del directorio actual, debemos indicarle ./*:

ls -d ./*

Lo mismo nos pasa si le indicamos únicamente el nombre del directorio:

$ ls -d directorio/
directorio/

También hemos de indicarle el * al final:

$ ls -d directorio/*

Y una última característica del modificador -d de ls que es que si el directorio está vacío, nos va a devolver un error:

$ ls -d directorio_vacio/*
ls: no se puede acceder a 'directorio_vacio/*': No existe el archivo o el directorio

Así que si queremos listar con la ruta completa los ficheros de un determinado directorio haciendo todas las comprobaciones previas para que no nos devuelva error, podemos escribir un script como este:

#!/bin/bash

if [ ! -d $1 ]
then
    echo "$1 no es un directorio válido."
    exit 1
else
    if [ ${1: -1} != "/" ]
    then
        path=$1"/*"
    else
        path=$1"*"
    fi
    if [ ! -z "$(ls -A $1)" ]
    then
        for file in $(ls -d $path)
        do
            echo $file
        done
    fi
    exit 0
fi

Donde:

  • Línea 3: comprobamos si el directorio existe.
  • Línea 8: comprobamos si el parámetro recibido acaba en / o no, para añadirle el /*.
  • Línea 14: comprobamos si el directorio no está vacío.
  • Línea 16: listamos el directorio con las rutas completas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.