ls
non ha alcuna opzione per farlo, ma una delle cose belle di unix & linux è che le pipeline lunghe e ineleganti possono essere facilmente trasformate in uno script di shell, funzione o alias. e questi, a loro volta, possono essere utilizzati nelle condutture come qualsiasi altro programma.
(NOTA: ci sono alcuni problemi di ambito con funzioni e alias. Gli script sono disponibili per qualsiasi eseguibile in grado di leggerli ed eseguirli. Gli alias e le funzioni sono disponibili solo nella shell corrente, sebbene il .profile / .bashrc di una sotto-shell possa ridefinire e quindi renderli disponibili. Inoltre, uno script può essere scritto in qualsiasi lingua - inclusi bash / sh, awk, perl, python e altri - qualunque sia la migliore per il lavoro o con cui hai più familiarità)
per esempio
alias lsf='find . -maxdepth 1 -type f -print0 | xargs -0r ls'
Ho aggiunto xargs in modo da poter utilizzare tutte le solite ls
opzioni, ad eslsf -lrS
Poiché utilizza find
, verranno visualizzati tutti i dotfile normalmente nascosti e tutti i nomi di file saranno preceduti da ./ - questa è l'unica differenza che noterai.
Potresti escludere i file dot con, ! -iname '.*'
ma poi dovresti avere due versioni dell'alias: una che mostrava i file dot e una no.
alias lsf2='find . -maxdepth 1 -type f -a ! -iname '\''.*'\'' -print0 | xargs -0r ls'
In alternativa, se lsf
fosse uno script piuttosto che un alias potresti analizzare le opzioni (forse con getopts o / usr / bin / getopt o simili) ed escludere dotfile a meno che non -a
fosse presente.
find
comando è il modo migliore per fare quello che vuoi. Per alcune altre opzioni affidabili, dovresti esaminare i comandi specifici della shell (e quelli sono tutt'altro che portatili)!