Tengo un directorio donde, independientemente del usuario o de las opciones seleccionadas, me gustaría que siempre mostrara archivos ocultos.
Sé que la -a
opció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_mod
siguiente 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 ls
y agrega una -a
bandera 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 ls
se 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 set
nuevamente para agregar la -a
bandera a los parámetros. Al final, solemos command
llamar al ls
comando real con los argumentos que hemos organizado. Gracias amuru¡Por señalar la set
simplificació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 ls
un 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 ls
de forma predeterminada, simplemente agréguelos a las dos command ls
llamadas correspondientes.