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

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

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

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

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

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

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

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)" 
  • Символические ссылки с ls, mv: принуждение функций к использованию «логических» адресов (запоминание исходного пути)
  • Как я могу остановить ls от спуска в директории, похожие на чернослив для поиска?
  • Msgstr "Показать все возможности <num>? (y или n) "для команды ls
  • Как настроить порядок сортировки символов?
  • Просмотреть расширенный ACL для файла с '+' в ls -l output
  • Всего против перечисленных каталогов
  • Игнорировать все совпадения для отрицательного шаблона extglob в рекурсивном ls
  • Как заказать несколько опций команды (ls)?
  • Эффективный поиск уникальных владельцев файлов и каталогов
  • Как проверить, что «ls» выводит что-то ... с помощью одной команды?
  • Есть ли какие-то подводные камни для переопределения ls?
  • Действительно странная проблема со списком файлов FAT32
  • Linux и Unix - лучшая ОС в мире.