Используя аппаратные средства отмечают время прихода на работу Linux

Править: Если у Вас есть утилиты GNU, см. ответ Gilles для метода с помощью GNU grepспособности к рекурсии, который намного более прост, чем find подход. Если Вы только захотите отобразить имена файлов, то Вы все еще захотите добавить -l опция, как я описываю ниже.


Использовать grep -l word только к расшифровке подписи файлов, содержащих соответствие.

Если Вы хотите найти все файлы в файловой системе, заканчивающейся в .sh, запуск в корне /, затем find самый соответствующий инструмент.

Самая портативная и эффективная рекомендация:

find / -type f -name '*.sh' -exec grep -l word {} + 2>/dev/null

Это почти столь читаемо, как это добирается и не твердо проанализировать, если Вы понимаете семантику позади каждого из компонентов.

  • find /: выполненный find запуск в корне файловой системы, /
  • -type f: только соответствуйте регулярным файлам
  • -name '*.sh':... и только файлы соответствия, имена которых заканчиваются в .sh
  • -exec ... {} +: команда выполнения, указанная в ... на подобранных файлах в группах, где {} заменяется именами файлов в группе. Идея состоит в том, чтобы работать на команде как можно больше файлов сразу в рамках системы (ARG_MAX). Эффективность {} + форма прибывает из уменьшения количества раз ... команду нужно назвать путем максимизации количества файлов, переданных каждому вызову ....
  • grep -l word {}: где {} то же {} повторенный сверху и заменяется именами файлов. Как ранее объяснено, grep -l печатает названия файлов, содержащих достойный word.
  • 2>/dev/null: скройте сообщения об ошибках (технически, перенаправьте стандартную погрешность к черной дыре, которая является /dev/null). Это по эстетическим и практическим причинам, начиная с выполнения find на / вероятно, приведет к стопкам "разрешения, отклоненного" сообщения, о которых Вы не можете заботиться о файлах, которые у Вас нет разрешения читать и каталоги, которые у Вас нет разрешения пересечь.

Существуют некоторые проблемы с предложениями, которые Вы получили и отправили в своем вопросе. Оба

grep word `find / -name \*.sh 2>/dev/null

и

find / -name "*.sh" 2>/dev/null | xargs grep word

сбой на файлах с пробелом на их имя. Лучше стараться не помещать имена файлов в замену команды в целом. Первый имеет дополнительную проблему потенциального столкновения с пределом ARG_MAX. Второй - близко к тому, что я предлагаю, но нет никакого серьезного основания использовать xargs здесь, не говоря уже о том, что безопасное и корректное использование xargs требует мобильности принесения в жертву для некоторых опций только для GNU (find -print0 | xargs -0).

4
13.03.2013, 16:22
1 ответ

Можно хотеть попробовать другое ядро. Изготовленное на заказ ядро может иметь некоторые проблемы с хронометрированием.

1
27.01.2020, 21:02

Теги

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