(Shell) Crea una función recursiva que devuelva el nombre base de los archivos, conservando la jerarquía.
Actualmente, tengo lo siguiente:
!/bin/sh
pathlink() {
for file in "$@";
do
if [ -d "$file" ];
then
echo "$file"
pathlink "$file/*"
else
echo '/home/buddhilw/dotfiles/'$(basename $file)
fi
done
}
pathlink \
/home/buddhilw/.config/* \
/home/buddhilw/.local/* \
/home/buddhilw/.bashrc
Recibo el siguiente error, para cada archivo en directorios superiores,
basename: extra operand ‘/home/buddhilw/.local/quicklisp/dists’
davy.ai
El mensaje de error indica que el comando
basename
está recibiendo un argumento adicional u operando que no sabe cómo manejar. En este caso, parece que el problema puede ser causado por la funciónpathlink
que se está llamando en directorios ybasename
está recibiendo como argumento la ruta completa del directorio en lugar de solo el nombre del archivo.Para solucionar este error, es posible que desee modificar la función
pathlink
para que solo llame abasename
en archivos y no en directorios. Puede hacer esto agregando una comprobación antes de llamar abasename
, utilizando la opción-f
detest
para verificar si el archivo es un archivo regular (no un directorio o enlace simbólico):Con esta modificación, el comando
basename
solo se llamará en archivos regulares y no en directorios u otros tipos de archivos, lo que debería evitar que aparezca el mensaje de error.