es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

(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’
Tags:  , , , ,

Answer

  1. Avatar for 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ón pathlink que se está llamando en directorios y basename 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 a basename en archivos y no en directorios. Puede hacer esto agregando una comprobación antes de llamar a basename, utilizando la opción -f de test para verificar si el archivo es un archivo regular (no un directorio o enlace simbólico):

    pathlink() {
      for file in "$@";
      do
        if [ -d "$file" ];
        then
    #      echo "$file"
          pathlink "$file/*"
        elif [ -f "$file" ];  # agregada comprobación para archivo regular
        then
          echo '/home/buddhilw/dotfiles/'$(basename $file)
    #       ln -nfs /home/buddhilw/dotfiles/$(basename $directory) $directory
        fi
      done
    }
    

    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.

Comments are closed.