Изменение цвета только одного каталога в ls

Проблема в одинарных кавычках. Переменные не расширяются в одинарных кавычках (от man bash:

Заключение символов в одинарные кавычки сохраняет литеральное значение каждого символа в кавычках.

Если вы хотите использовать переменную, вам понадобятся двойные кавычки. Чтобы проиллюстрировать:

$ foo="bar"
$ echo '$foo'
$foo
$ echo "$foo"
bar

Итак, в вашем случае вы хотите что-то вроде:

for i in $( find -E . -iregex ".*\.$varExtension")  ; do  

Или, лучше, поскольку вышеуказанное не может иметь дело со странными именами файлов:

find -E . -iregex ".*\.$varExtension" -print0 | while IFS= read -r -d '' i; do

Или забудьте цикл и заведите find сделать все, что за вас стоит:

find -E . -iregex ".*\.$varExtension" -exec something {} \;

0
24.06.2016, 21:11
2 ответа

Насколько я понимаю, вы можете указывать только файлы, которые заканчиваются определенным шаблоном, например *. Jpg = 01; 31 , чтобы сделать jpg-файлы красными. Тогда, конечно, вы всегда можете обмануть его примерно так * IMG_20150808_202948.jpg = 01; 31 :)

0
29.04.2021, 00:13

Согласившись с @nsg, что вы не можете этого сделать, кажется, что документация отсутствует. Итак, вы можете прочитать исходный код для ls в print_color_indicator , в частности, в том месте, где он проверяет суффикс файла , комментируя

/* Check the file's suffix only if still classified as C_FILE.  */

Итак, нет : вы не можете обмануть его, создав имя каталога, заканчивающееся на ". jpg" . Вы можете применять суффиксы только к именам файлов (и видеть код), суффикс не обязательно должен начинаться с "." .

0
29.04.2021, 00:13

Теги

Похожие вопросы