Wie färbe ich versteckte Dateien in `ls`-Dateilisten?

10

LS_COLORSMit der Umgebungsvariablen können Sie Farben für verschiedene Dateitypen für den lsBefehl von GNU coreutil festlegen , z. B. Verzeichnisse, reguläre Dateien, Links usw. Ich nehme an, dass Punktdateien als Variation der Linux-Dateitypen und nicht als eigenständiger Typ betrachtet werden Keine Option zum Festlegen einer Anzeigefarbe für sie.

Gibt es eine (andere) Möglichkeit, mit lsListings versteckte Dateien in einer anderen Farbe anzuzeigen?

Johnny Baloney
quelle
Diese Antwort hat mehr als Sie jemals wissen wollten LS_COLORS. Ich konnte nicht herausfinden, wie ich es für Dotfiles zum Laufen bringen kann, aber vielleicht möchten Sie es überprüfen.
Terdon
1
@terdon - es funktioniert nicht für Punktedateien. Es könnte für einige, aber sehr wenige. Die Länge einer Erweiterung ist begrenzt, und die meisten vollständigen Dateinamen überschreiten diese. Es funktioniert beispielsweise für Dateien mit dem Namen *.hide. Diese Antwort behebt ein ähnliches Problem für Verzeichnisse, obwohl die Antworten auf dieses und das Verzeichnisproblem wahrscheinlich nicht dieselben sind.
Mikeserv

Antworten:

1

Wenn Sie nur nach Namen sortieren, kann dies helfen:

alias ll='LS_COLORS=$LS_COLORS:"di=0;34:" ; S_COLORS=$LS_COLORS:"fi=0;37:" ; export LS_COLORS; ls -dHhl --color=auto .*; LS_COLORS=$LS_COLORS:"di=1;94:" ; LS_COLORS=$LS_COLORS:"fi=1;37:" ; export LS_COLORS$

Der Befehl ls wird jedoch in zwei Teile aufgeteilt, einen für versteckte Dateien und Ordner und einen für den Rest.

doof
quelle
0

Ja, benutze cf. Ich habe gerade eine gut dokumentierte Version veröffentlicht, die speziell die Ausgabe pro Dateierweiterung und / oder bestimmte spezielle Attribute (ausführbare Dateien, Links, versteckte Dateien und Verzeichnisse) färbt. Versuch es einmal!!! Es ist schwer loszulassen, wenn man sich erst einmal daran gewöhnt hat.

https://github.com/AdamDanischewski/cf

A. Danischewski
quelle
-1

Wenn Sie nur versteckte Dateien (und Ordner) hervorheben möchten und sich nicht um die Farbgebung aller anderen Dateien kümmern, ist der offensichtliche Ansatz die Ausführung ls -la | grep -E "^| \.[^/|'.].*"

Wenn Sie die anderen Farben beibehalten möchten, wird es schwierig, da $LS_COLORSdas Färben versteckter Dateien anscheinend nicht nativ unterstützt wird.

Ich hatte die Idee, die versteckten Dateien des aktuellen Verzeichnisses dynamisch $LS_COLORSals Pseudoerweiterung an die Umgebungsvariable anzuhängen , sie dann auszuführen ls -laund anschließend auszuführen dircolors, um das ursprüngliche Farbschema zurückzusetzen. Offensichtlich liegt ein Konflikt vor, wenn eine versteckte Datei denselben Namen wie eine bekannte Erweiterung hat. Auch diese Methode funktioniert nicht mit versteckten Ordnern.

Warnung: Diese Lösung ist ein (nicht sehr gründlich getesteter) Hack. Verwenden Sie es auf eigenes Risiko.

for h in $(ls -A | grep "^\."); do LS_COLORS="$LS_COLORS*$h=04;05:"; done; ls -la; eval $(dircolors)

Michael Osl
quelle