Как раскрасить скрытые файлы в списках файлов `ls`?

10

LS_COLORSПеременная окружения позволяет вам выбирать цвета для разных типов файлов для команды GNU coreutil ls, таких как каталоги, обычные файлы, ссылки и т. д. Я предполагаю, что точечные файлы считаются вариацией типов файлов Linux, а не отдельным типом, поэтому существует нет возможности указать цвет дисплея для них.

Есть ли какой-либо (другой) способ сделать lsсписки скрытыми файлами другого цвета?

Джонни Балони
источник
Этот ответ имеет больше, чем вы когда-либо хотели знать LS_COLORS. Я не мог понять, как заставить его работать на точечные файлы, но вы можете проверить это.
Тердон
1
@terdon - это не работает для дотфайлов. Это может быть для некоторых, но очень мало. Существует ограничение на длину расширения, и большинство целых имен файлов будут превышать его. Это будет работать для файлов, названных, *.hideнапример. Этот ответ решает аналогичную проблему для каталогов, хотя ответы на этот вопрос и проблема с каталогами, вероятно, не совпадают.
mikeserv

Ответы:

1

Если вы сортируете только по имени, это может помочь:

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$

Однако он разделяет команду ls на две части, одну для скрытых файлов и папок, одну для остальных.

бестолковый
источник
0

Да, используйте cf. Я только что выпустил хорошо документированную версию, она специально окрашивает вывод ls для каждого расширения файла и / или определенных специальных атрибутов (исполняемый файл, ссылки, скрытый каталог и каталоги). Дать ему шанс!!! Трудно отказаться от этого, когда привыкнешь.

https://github.com/AdamDanischewski/cf

A.Danischewski
источник
-1

Если вы просто хотите выделить скрытые файлы (и папки) и вам не нужны цвета всех остальных файлов, тогда очевидный подход - запустить ls -la | grep -E "^| \.[^/|'.].*"

Если вы хотите сохранить другие цвета, то все становится сложнее, потому $LS_COLORSчто изначально не поддерживает раскрашивание скрытых файлов, как кажется.

Мне пришла в голову идея динамически добавлять скрытые файлы текущего каталога в $LS_COLORSпеременную окружения как псевдо-расширение, а затем выполнить ls -laи после этого запустить, dircolorsчтобы сбросить исходную цветовую схему. Очевидно, что возникнет конфликт, если скрытый файл будет иметь то же имя, что и известное расширение. Также этот метод не работает со скрытыми папками.

Предупреждение: это решение (не очень тщательно проверено) взломать. Используйте его на свой страх и риск.

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

Майкл Осл
источник