2017-02-11 10 views
3

я ищу способ модификации Ls выхода таким образом, что каждый отображает каталог [+] перед именем каталога. Идеально делать через bashrc.Modify LS выхода для отображения [+] перед каталогами

[email protected][~]$ ls 
[+]directory   [+]directory 
[+]directory   file.png 
file     file.txt 
readme 

В настоящее время я просто настройки вывода цвета:

LS_COLORS=$LS_COLORS:'di=1;37;4' ; export LS_COLORS 
+2

Существует вариант, который уже делает * почти *, что вы хотите: 'Ls -F' добавляют различные символы для различных типов файлов, например,'/' к каталогам, '*' к исполняемым файлам, '@' для символических ссылок и т. д. –

ответ

2

Это может помочь вам, но это дает только выход один столбец:

ls | sed -r "$(find -maxdepth 1 -type d | cut -d/ -f2 | sed "1 d; 2~1 { s:.*:s/^\\(&\\)$/[+]\\\\1/;:g}")" 

Он работает по конвейеру вывод от ls до sed, а скрипт sed динамически создается с использованием канала, который преобразует список каталогов в список S/^dirname$/[+]dirname/; sed script l Инес.

Попробуйте все детали отдельно, чтобы посмотреть, как это работает.

Например, при запуске в/и т.д. выходы начинает это нравится:

[+]acpi 
adduser.conf 
[+]adobe 
[+]akonadi 
aliases 
aliases.db 

Вы можете псевдоним команды в вашем Bashrc.

И вы можете заглянуть в команду tree.

+3

можно добавить к столбцу номер – setempler

+1

Вы можете принудительно вывести вывод столбца с помощью '-C', но поскольку длина отдельных слов изменяется, это может испортить выравнивание табуляции. –

+2

Это не удастся, как и все попытки проанализировать вывод 'ls', если имя файла содержит новую строку. – chepner

2

Вы можете использовать:

ls -l: каталоги будут начинаться с г. ls -p: слэш будет добавлен в имя каталога как директории/
ls -F: также добавлять слэш после Dir имен и других знаков к другим типам файлов (*, и т.д.)
ls -d */: Как сообщили в комментариях, перечислю только dir имена с косой чертой в конце. Удалите -d, чтобы увидеть также содержимое sub dir.

С точки зрения манипулируя выхода LS вы могли бы пойти, как:

ls -l |awk '/^d/{print "[+]"$NF}; /^[^d]/{print $NF}' |column 

Вы также можете использовать find и избежать разбора ls так было сказано, что анализ Ls может сломаться, если имена файлов содержат странные символы, такие как новые линии и т.д. .
find в этом формате будет производить вывод, идентичный выше ls:

find . -maxdepth 1 -printf '%Y %f\n' |awk '/^d/{print "[+]"$NF}; /^[^d]/{print $NF}' |column 
+0

NIce. И гораздо элегантнее, чем я придумал. –

+0

Если вы хотите видеть только каталоги, используйте 'ls * /'; нет необходимости разбирать вывод 'ls'. – chepner

+2

@chepner Хороший совет. Только для записи 'ls * /' будет также расширять содержимое dir, и экран становится беспорядочным. Может быть ограничено 'ls -d * /' для отображения только имен dir. –

1

вы также должны попробовать это с помощью Баш скрипт

#!/usr/bin/env bash 

myls() { 
    for i in *;do 
     [[ -d "${i}" ]] && { 
      printf "%s\n" "[+] ${i}" 
      continue; 
     } 
     printf "%s\n" "${i}" 
    done 
} 

источник сценария в файле .bashrc. Всякий раз, когда вы хотите использовать это, просто позвоните myls в каталог.

следует отметить, что это не дает вам цветной вывод

 Смежные вопросы

  • Нет связанных вопросов^_^