Можно объединить действия find
и grep
выполнять это:
find /search/path/ -type f \( -name '*.p' -or -name '*.w' \) \
-exec grep -L -e 'sysvars.i' -e 'preprocess.i' {} +
Давайте сломаем это.
find /serch/path
возвраты все файлы в указанном пути. Затем крошечная потребность сузить это вниз запускающееся с вещей, которые устранят большинство соответствий сначала, чтобы сэкономить время, проверив другие вещи позже.-type f
возвраты только файлы. Если у Вас, оказалось, были каталоги, соответствующие шаблону имени файла, мы не хотим отправлять их в grep
.\( [expr1] -or [expr2] \)
создает альтернативное соответствие так, чтобы нашли файлы возвратов что metch или expr1 или expr2, но нет никакой причины, это должно соответствовать обоим. Справка круглой скобки разделяет это или группу от остальной части опций соответствия, которые являются на самом деле и требования.-name '*.p'
и -name '*.w'
довольно очевидны, возвращают файлы, соответствующие тем шаблонам имени.-exec command {} +
выполнит указанную команду и любые споры с {}
бит, замененный аргументами в пользу каждого файла, подобранного остальной частью find
команда. -exec
функция предпочтительна для использования xargs
или передача по каналу к циклу, потому что это обрабатывает заключение в кавычки и проблемы имени файла так хорошо.grep
используется для поиска шаблона в указанных файлах. -L
используется для возврата просто списка имен файлов, которые не имеют соответствий-e 'PATTERN'
указан дважды для списка этих двух строк поиска, которым Вы не хотели соответствовать.Может не быть ответ, который Вы ищете, но лучшее, которое я могу найти из памяти.
-y, --fuzzy find similar file for basis if no dest file
(извините, должен был упомянуть, это - команда/флаг rsync),
(дополнительно, я понятия не имею, как, а именно, это работает),
--fuzzy
только соответствует подобным файлам в том же каталоге, где подобный определяется как "идентичный размер, и измененное время" или "так же назвало". – wting 16.06.2012, 03:57