Вы можете сделать это с помощью zsh
встроенных операторов glob. Это имело бы несколько преимуществ:
find
и grep
интерпретировать шаблон по-разному)-printf
, -iname
, --color
не являются -стандартными расширениями ). Может быть, что-то вроде:
#! /bin/zsh -
pattern="(#i)${1?Please specify a pattern}"
set -o extendedglob
typeset -A find_file_color
find_file_color=(
dirname $'\e[0;33;49m'
basename $'\e[1;34;49m'
match $'\e[1;33;44m'
reset $'\e[m'
)
colorize_file() {
local file=${1-$REPLY}
case $file in
(*/*)
REPLY=$find_file_color[dirname]$file:h$find_file_color[reset]/;;
(*)
REPLY=
esac
REPLY+=$find_file_color[basename]${${file:t}//(#m)$~pattern/$find_file_color[match]$MATCH$find_file_color[basename]}$find_file_color[reset]
}
print -rC1 -- **/*$~pattern*(ND.+colorize_file)
Обратите внимание, что он строит и сортирует весь список перед передачей в print
для печати. Таким образом, вы начнете получать некоторый вывод только после того, как все файлы будут найдены. Чтобы распечатать их по мере их нахождения (, но тогда нам пришлось бы отказаться от сортировки ), вместо этого вы могли бы использовать функцию квалификатора glob для печати раскрашенного файла:
#! /bin/zsh -
pattern="(#i)${1?Please specify a pattern}"
set -o extendedglob
typeset -A find_file_color
find_file_color=(
dirname $'\e[0;33;49m'
basename $'\e[1;34;49m'
match $'\e[1;33;44m'
reset $'\e[m'
)
colorize_file() {
local file=${1-$REPLY}
case $file in
(*/*)
REPLY=$find_file_color[dirname]$file:h$find_file_color[reset]/;;
(*)
REPLY=
esac
REPLY+=$find_file_color[basename]${${file:t}//(#m)$~pattern/$find_file_color[match]$MATCH$find_file_color[basename]}$find_file_color[reset]
print -r -- $REPLY
false # don't bother adding the file to the glob expansion
}
: **/*$~pattern*(ND.+colorize_file)
Итак, в конце концов мне удалось решить мою проблему, используя загрузку -восстановление по просьбе @psusi. Как только я это сделал, мой ноутбук мог загружаться только в Ubuntu, и у меня не было возможности выбрать какую-либо другую ОС, потому что меню Grub даже не отображалось. Я решил открыть grub -настройщик , чтобы увидеть текущую конфигурацию, и она извлекла мою предыдущую конфигурацию. Я решил обновить grub с сохраненной конфигурацией, и теперь все работает как обычно. Когда я загружаю свой компьютер, я больше не вижу оболочку Grub, и она напрямую переходит в меню Grub, из которого я могу загрузить Ubuntu или Windows. Спасибо, что так быстро оказали помощь. Я отмечу этот вопрос как решенный.