È possibile creare ls
distinguere gli script eseguibili dagli effettivi binari compilati?
I permessi sono spesso gli stessi (+x
), e con ls -F
ottieni un suffisso asterisco (*
) per entrambi, quindi è difficile distinguerli. Ho uno script per impostare i colori di ls
, ma si basa sul fatto che il file sia eseguibile o meno, quindi vengono visualizzati allo stesso modo:
BG='01;32' # green
EX="ex=$BG" # file with execute permission
Non voglio dipendere dall'estensione perché molti di questi file non ce l'hanno.
Voglio questo così quando vedo un messaggio di errore bizzarro e penso:"Quale codice lo ha causato?", So se è sicuro o meno cat
il file.
Se non esiste una soluzione standard, che dire dell'analisi dell'output di file
, in una funzione comune, e inserendo qualche segno distintivo? O sarebbe troppo lento per ls
?
Risposta accettata:
È necessario esaminare il contenuto di un file per distinguere tra binari e script. ls
non lo farà, guarda solo i nomi dei file e i metadati (tipo, autorizzazione, ecc.).
Ecco un parser grezzo per file
che colora gli script e i binari in modo diverso. Funziona come ls -d
; l'aggiunta di metadati richiederebbe un lavoro di patch-up che richiede un approccio più diretto (ad esempio in Perl o Python); usa lsx somedir/*
per elencare il contenuto di una directory. Si presume che i nomi dei file non contengano né newline né due punti (puoi cambiare il :
separatore per qualche altra stringa con -F
opzione per file
).
lsx () { file -iN -- "[email protetta]" | mentre IFS=leggi -r riga; nome=${riga%%:*}; type=${line#*:} color=0 case $type in application/x-executable*) color='32';; text/x-shellscript*) color='01;32';; applicazione/*zip*) color='31';; esac printf '