Для первой части отметьте это xargs
только работы, при отсутствии пробельных символов или \'"
в Ваших именах файлов. Посмотрите, Как искать слово во всем содержании каталога в Linux для объяснения и альтернативы.
Кроме того, всегда помещаемые двойные кавычки вокруг подстановок переменных: "$path"
. Без двойных кавычек оболочка разворачивает пробел и подстановочные знаки в значении $path
, так использование его закрыло кавычки повреждения, если у Вас есть пробел или подстановочные знаки в том имени файла. То же идет для $pattern
(только для смеха, попытайтесь пропустить кавычки и искать h*
в каталоге, содержащем названные файлы hi
и hello
).
Если Ваша версия grep
имеет -r
опция пересечь каталоги рекурсивно, Вам не нужно find
здесь. -r
опция присутствует на Linux, FreeBSD, Mac OS X и Cygwin среди других. Иначе:
find "$path" -type f -exec grep -Hn "$pattern" {} + | awk -F: '{print $1 ":" $2}'
Я зафиксировал Ваш awk
звоните выше, также, так, чтобы это распечатало только имя файла и номера строки. Я также передаю -H
опция к grep
, гарантировать, что это всегда печатает имя файла, даже если, оказывается, существует единственный файл. Этот код предполагает, что Ваши имена файлов не содержат :
или новые строки; если бы они могли бы, вещи, которые будут сложными, и Вы лучше или полагались бы на grep's GNU -Z
опция или процесс файлы индивидуально:
find "$path" -type f -exec sh -c 'for x; do grep -n "$0" <"$x" | awk -v fn="$x" -F: 'print fn ":" $1'; done' "$pattern" {} +
xfstt
"Сервер Шрифта X11 для Истинных Печатных шрифтов", поэтому если Вы не хотите необычные шрифты, не удаляйте его. X11 может повредиться без него.
apt-get remove
. Начиная с этого все работает до сих пор. Я не вижу изменения на своем ноутбуке. Возможно, Lubuntu не использует этот сервер шрифта. Позволяет посмотрите. – Sigur 17.11.2012, 16:20