2014-02-10 5 views
2

Я попытался обновить файл в subversion. Мне нужно добавить строку в make-файл, чтобы создать переработанную версию кода. Вот команда, которую я попытался найти в файле make.вопросы по команде Linux «find -exec {}»

найти. -name "* ake *" -exec grep имя_файла {}/dev/null \;

Это работает. Но мои вопросы: 1. Что такое «\;» для? Если я его изменю, появится сообщение об ошибке.

2 Значение/dev/null не изменило результаты. Я знаю, что это устройство, в котором утилизируется вся информация о мусоре. Но я все еще не совсем понимаю это в этой ситуации.

Заранее благодарен!

+0

я не уверен/DEV/нуль имеет определенную роль здесь - это должно расшириться в просто «Grep файл {current_file_path}» The/разработчик/null не требуется. –

+0

Это '/ dev/null' озадачивает меня. Возможно, создатель думал, что 'find' работал как globbing, и' exec' запускается независимо от того, нашел ли 'find' что-либо или не сделал, предоставив' grep' хотя бы 1 файл для поиска? В любом случае, я вижу нулевую причину, чтобы он был там. – Wrikken

+0

'find ... -exec grep -e filename/dev/null {} +' будет значительно более эффективным, кстати; вариант '\;' в этом случае не имеет смысла. –

ответ

4

\; указывает конец команды, выполняемой find. \ необходим, чтобы остановить интерпретацию оболочки ;. Из man find:

-exec command ; 
      Execute command; true if 0 status is returned. All following 
      arguments to find are taken to be arguments to the command until an 
      argument consisting of ‘;’ is encountered. 

/dev/null умный трюк, который мне потребовалось некоторое время, чтобы выяснить. Если grep передано более одного имени файла, он печатает содержащееся имя файла перед каждым совпадением. /dev/null действует как пустой файл, не содержащий совпадений, но при этом grep считает, что он всегда передается более одного имени файла. Гораздо понятнее альтернативы предложили Ричард будут использовать -H вариант Grep в:

 -H, --with-filename 
       Print the filename for each match. This is the default when there 
       is more than one file to search. 
+1

Так можно использовать 'grep -H ' –

+0

Да, на самом деле я бы сказал, что это был бы более понятный и, следовательно, лучший подход. –

+0

Возможно, стоит отметить, что '-exec command {} +' - это другое стандартное использование POSIX, полностью действительное, когда команда 'grep', а также значительно более эффективна по сравнению с запуском команды grep для каждого результата. –

Смежные вопросы