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.