¿Hay alguna manera de que ls muestre archivos ocultos solo para ciertos directorios?

¿Hay alguna manera de que ls muestre archivos ocultos solo para ciertos directorios?

Tengo un directorio donde, independientemente del usuario o de las opciones seleccionadas, me gustaría que siempre mostrara archivos ocultos.

Sé que la -aopción mostrará archivos ocultos. Sólo quiero automatizar la decisión sobre el uso de la opción.

Digamos que estoy en /home/user. No me importa ver los archivos ocultos, pero si estoy en /filestoprcess quiero ver los archivos ocultos.

¿Existe este tipo de funcionalidad?

Respuesta1

La forma más sencilla que se me ocurre para hacer esto sería crear un alias de shell que se asigne a una función. Digamos que estamos usando bash y agregamos el siguiente alias a su .bashrc:

alias ls=ls_mod

Ahora, agregue la ls_modsiguiente función:

ls_mod () {
    DIRS_TO_SHOW_HIDDEN=(dir1 dir2 dir3)
    for DIR in "$@"; do
        for CHECK in "${DIRS_TO_SHOW_HIDDEN[@]}"; do
            if [ "$(realpath "$DIR")" == "$CHECK" ]; then
                ls -a "$DIR"
            else
                ls "$DIR"
            fi
        done
    done
}

No lo he probado, así que dudo que sea perfecto, pero al menos te da una idea. Es posible que tengas que esforzarte para pasar argumentos adicionales a ls.

Respuesta2

Para desarrollar mi comentario sobre la respuesta de John Moon, aquí hay una función que ajusta lsy agrega una -abandera si la ruta coincide con una lista determinada:

function ls() {
  # if no arguments are provided, the current directory is assumed
  [ "$#" -eq 0 ] && set .
  case "$(realpath "$1")" in
        (/path/to/jason/filestoprocess*|\
         /path/to/jason/otherfilestoprocess*)
                set -- -a "$1" ;;
  esac
  command ls "$@"
}

La primera sección de la función verifica si lsse está realizando un desnudo; en este caso, configuramos .(el directorio actual) como parámetro #1; de lo contrario, asumimos que el primer parámetro (dado) es la ruta a la lista.

Si la ruta establecida o dada coincide con los patrones enumerados (ya sea ...filestoprocess u ...otherfilestoprocess aquí), entonces usamos setnuevamente para agregar la -abandera a los parámetros. Al final, solemos commandllamar al lscomando real con los argumentos que hemos organizado. Gracias amuru¡Por señalar la setsimplificación!

Para agregar más trazados, simplemente continúe con los patrones, separándolos con (|)caracteres de barra vertical. He dividido los dos patrones existentes en líneas separadas con el carácter de escape de barra invertida \para que sean más fáciles de leer.

Si ya ha asignado lsun alias a algo, eso tendrá prioridad y será necesario eliminarlo para que esta función funcione (de lo contrario, cualquier indicador que agregue el alias se pasará a esta función y terminará en $1). Si hay indicadores que le gustaría tener lsde forma predeterminada, simplemente agréguelos a las dos command lsllamadas correspondientes.

información relacionada