Рекурсивный grep не работает для файлов * .c

Недавно я обновился от Xubuntu 11.10 до Xubuntu 12.04 LTS, что заставило <Control><Alt>Delete остановить инициирование блокировки по неизвестной причине.

Чтобы обойти это (и восстановить исходное поведение), вы можете перейти к настройкам Xfce, затем к клавиатуре, а затем к ярлыкам приложений. Вы должны найти исходный ярлык <Control><Alt>Delete для xflock4. Но теперь попробуйте добавить новый ярлык для той же команды (xflock4), введя то, что вы считаете «Control», «Alt», «Delete». Введенный ярлык скажет <Primary><Alt>Delete. Теперь последовательность клавиш должна работать, но я не знаю, почему мой ключ «Control» называется «Primary».

1
задан 14 July 2013 в 19:03

1 ответ

Шаблон *.c оценивается вашей оболочкой.

Я думаю, что вы хотите, чтобы найти все файлы, соответствующие шаблону *.c (рекурсивно), и grep искать для вы в нем. Вот как это сделать:

find . -name "*.c" -print0 | xargs --null grep -l search-pattern

Он использует xargs для добавления результатов поиска в find.

Кроме того, используйте -exec, например:

find . -name "*.c" -exec grep -l search-pattern "{}" \;

Кроме того, я не уверен, действительно ли вы хотите -l выбрать grep. Он остановится при первом совпадении:

-l, --files-with-matches
      Suppress normal output; instead print the name of  each
      input  file  from which output would normally have been
      printed.  The scanning will stop on  the  first  match.
      (-l is specified by POSIX.)
3
ответ дан 24 May 2018 в 20:00
  • 1
    Синтаксис find/xargs разбивается на имена файлов, содержащие пробелы. Опция -L в grep останавливается в первом совпадении каждого файла и продолжается с последующим файлом: если вы хотите увидеть, содержит ли шаблон хотя бы один раз в каждом заданном файле, это происходит быстрее. – enzotib 14 July 2013 в 19:12
  • 2
    @enzotib Спасибо, исправлено с помощью опции -print0 и xargs --null. – gertvdijk 14 July 2013 в 19:17

Другие вопросы по тегам:

Похожие вопросы: