¿Es posible hacer ls
distinguir los scripts ejecutables de los binarios compilados reales?
Los permisos suelen ser los mismos (+x
), y con ls -F
obtiene un sufijo de asterisco (*
) para ambos, por lo que es difícil distinguirlos. Tengo un script para configurar los colores de ls
, pero depende de que el archivo sea ejecutable o no, por lo que se muestran igual:
BG='01;32' # green
EX="ex=$BG" # file with execute permission
No quiero depender de la extensión ya que muchos de estos archivos no la tienen.
Quiero esto para que cuando vea un mensaje de error extraño y piense:"¿Qué código causó eso?", Sé si es seguro o no cat
el archivo.
Si no hay una solución estándar, ¿qué hay de analizar la salida de file
? , en una función común, e insertando alguna marca distintiva? ¿O sería demasiado lento para ls
? ?
Respuesta aceptada:
Debe mirar el contenido de un archivo para distinguir entre binarios y scripts. ls
no hará esto, solo mira los nombres de los archivos y los metadatos (tipo, permiso, etc.).
Aquí hay un analizador crudo para file
que colorea scripts y binarios de manera diferente. Actúa como ls -d
; agregar metadatos requeriría un trabajo de parcheo que requiere un enfoque más directo (por ejemplo, en Perl o Python); use lsx somedir/*
para listar el contenido de un directorio. Se supone que los nombres de los archivos no contienen líneas nuevas ni dos puntos (puede cambiar el :
separador de alguna otra cadena con -F
opción para file
).
lsx () { archivo -iN -- "[email protected]" | while IFS=leer -r línea; hacer nombre=${linea%%:*}; type=${line#*:} color=0 case $type in application/x-ejecutable*) color='32';; texto/x-shellscript*) color='01;32';; aplicación/*zip*) color='31';; esac printf'