Перейти к основному содержимому

tree, но удобнее для скринридера

··247 слов·2 минут

Все знают команду tree для вывода дерева директорий и файлов рекурсивно и в красивом формате.

В красивом для зрячих, но неудобном для нас. Неудобном в плане чтения отступов.

А сегодня я узнал, что можно вот так:

tree | sed 's/[├─│└]/ /g'

Все украшательства заменяются на обычные пробелы, что позволяет скринридеру корректно обработать отступы и проговорить либо пропищать их сигналом.

А разве tree не умеет так сам?

Я проверил: у tree есть ключ -i, который отключает линии отступов, и есть опции для другого стиля символов, например -A, -S и --charset.

Но это не совсем то же самое.

tree -i убирает линии отступов. А мне хочется сохранить саму идею дерева, только заменить псевдографику на обычные пробелы, чтобы скринридеру было легче читать структуру.

Поэтому вариант с sed пока выглядит самым простым и рабочим.

Обёртка stree

Можно создать скрипт вот с таким содержимым:

#!/bin/sh

tree "$@" | sed 's/[├─│└]/ /g'

И положить его, например, в:

/usr/local/bin/stree

После этого сделать исполняемым:

sudo chmod +x /usr/local/bin/stree

И вызывать вместо tree команду stree с любыми желаемыми параметрами от tree.

Например:

stree -L 2

или:

stree -a --dirsfirst

Всё будет работать, ведь мы передаём утилите весь набор параметров, делая наш скрипт просто обёрткой над оригинальной программой.

Важная мелочь

В скрипте лучше писать именно так:

tree "$@"

А не так:

tree $@

Первый вариант корректнее обрабатывает аргументы с пробелами и другими весёлыми символами в именах файлов и каталогов.

Вместо заключения

Если вы незрячий, пользуйтесь и радуйтесь.

Не великое инженерное решение, конечно, но свою задачу выполняет идеально.

Кирилл Белоусов
Автор
Кирилл Белоусов
Также известен как cyrmax. Пишу код, тестирую, автоматизирую инфраструктуру и помогаю делать цифровые продукты доступнее.