Сделать ls отличать скрипты от двоичных файлов на выходе

Можно ли отличать исполняемые скрипты от реальных скомпилированных двоичных файлов?

Разрешения чаще всего одинаковы ( +x ), а с ls -F вы получаете суффикс звездочки ( * ) для обоих, поэтому их сложно отличить друг от друга. У меня есть скрипт для настройки цветов ls , но он зависит от исполняемого файла или нет, поэтому они отображаются одинаково:

 BG='01;32' # green EX="ex=$BG" # file with execute permission 

Я не хочу зависеть от расширения, так как у многих из этих файлов его нет.

Я хочу, чтобы это произошло, когда я увидел какое-то странное сообщение об ошибке и подумал: «Какой код вызвал это?», Я знаю, безопасно ли cat файл.

Если стандартного решения нет, как разобрать вывод file в одной общей функции и вставить какую-то отличительную отметку? Или это будет слишком медленным для ls ?

  • Понимание команды «grep» показывает разные результаты, чем ожидалось
  • las pagination на MontaVista с BusyBox
  • Команда `ls` не отображает содержимое последней директории
  • Linux - команда для отображения файлов (кроме ls)
  • linux + как игнорировать (фильтровать) файл с пространством
  • ls и команда find, исключая определенный каталог
  • Есть ли замена «ls», которая может обрабатывать подстановочные знаки?
  • Результат «ls | wc -l "не соответствует реальному количеству файлов
  • 2 Solutions collect form web for “Сделать ls отличать скрипты от двоичных файлов на выходе”

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

    Вот грубый парсер для file который по-разному окрашивает скрипты и двоичные файлы. Он действует как ls -d ; добавление метаданных потребует исправления, требующего более прямого подхода (например, в Perl или Python); используйте lsx somedir/* для отображения содержимого каталога. Предполагается, что имена файлов не содержат новых строк и двоеточий (вы можете изменить разделитель : для другой строки с параметром -F для file ).

     lsx () { file -iN -- "$@" | while IFS= read -r line; do name=${line%%: *}; type=${line#*: } color=0 case $type in application/x-executable*) color='32';; text/x-shellscript*) color='01;32';; application/*zip*) color='31';; esac printf '\033[%sm%s\033[0m\n' "$color" "$name" done } 

    Вы могли бы играть с dircolors . Посмотрите на выход dircolors -p . В моих системах я нахожу следующие релевантные определения:

     # This is for files with execute permission: EXEC 01;32 … # Or if you want to colorize scripts even if they do not have the # executable bit actually set. #.sh 01;32 

    Если вы удалите # в последней строке и напишите .sh 07;31 ваши сценарии оболочки (все файлы с расширением .sh ) будут мигать красным цветом.

    Сохраните настройки в ~/.dircolors и добавьте в свою .bashrc строку:

     eval "$(dircolor $HOME/.dircolors)" 
    Linux и Unix - лучшая ОС в мире.