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

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

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

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

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

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

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

  • Использование цвета терминала не остается
  • ls: уточнить: файл или папку
  • Как получить общий размер всего в каталоге в одной строке?
  • ls & dircolors - различать символическую ссылку на каталог и символическую ссылку на обычный файл
  • Замена команды in for loop не работает
  • ls command - список файлов, содержащих определенную строку в имени файла и принадлежащих к определенному типу
  • Как я могу перечислить LS_COLORS в цвете?
  • Поиск файла, в котором есть «информация» в заголовке
  • 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)" 
    Interesting Posts

    Как передать переменную среды скрипту?

    Автоматизированный вход ssh с парольной фразой?

    Укажите идентификационный файл (id_rsa) с помощью rsync

    ACL для пользователя binddn для PAM?

    Кто-нибудь знает хороший gui для MariaDB?

    Субтитры «Растяжка» с помощью инструмента командной строки

    Каковы недостатки отключения THP и почему она включена по умолчанию во многих дистрибутивах?

    Предопределенный источник ввода для каждого окна в Gnome

    Устройство с USB-портом для хранения пользователей – как определить / как разрешить небезопасные отключения?

    Двойная загрузка – Установленная запись арки и окон исчезла на grub

    Synaptic Package Manager – выберите обновление в массовом порядке

    Скопировать и вставить скрипт для алфавита и чисел

    Как установить и использовать при планировании заданий?

    Удаленный пользователь SSH всегда получает «соединение закрыто»

    Загрузка программного обеспечения UEFI

    Linux и Unix - лучшая ОС в мире.