Недавно я получил эту find
строку, но я не могу объяснить, откуда взялась разница между двумя приведенными ниже:
Пример 1
[root@centos share]# find . -exec grep -i "madis" {} /dev/null \;
./names:Madison Randy:300:Product Development
Пример 2
[root@centos share]# find . -exec grep -i "madis" {} \;
Madison Randy:300:Product Development
Как вы можете видеть, в первом есть конкретный файл, из которого происходит эта строка, и до сих пор я действительно не могу выяснить, почему это происходит.
/dev/null
том, чтобы убедиться, что все, что связано с grep-ed, не будет найдено в (пустом)/dev/null
файле, поэтому выдаются только правильные местоположения»/dev/null
выполняя поиск, вы не тратите время на поиск через непустой фиктивный файл. И наконец, цель поиска/dev/null
очевидна для тех, кто знаком с этой идиомой.man grep
:Разница заключается в том, что в обоих случаях grep вызывается с одним или двумя аргументами файла. Вместо добавления
/dev/null
вы можете позвонитьgrep
с аргументом-H
. Может быть,/dev/null
поведение более широко поддерживается.источник
grep -H
не переносимо -/dev/null
трюк работает без GNU grep.Первый пример эквивалентен запуску grep над двумя файлами для каждого файла, найденного в результате
find
выражения. Например, еслиfind
найдет три файлаa.txt
,b.txt
аc.txt
затемgrep
запустится какКоторый
grep
покажет имя файла, для которого соответствует выход. Поскольку ничто не будет соответствовать / dev / null, гарантируется, что имя файла первого файла будет напечатано, если оно совпадает.Принимая во внимание, что второй пример эквивалентен
В этом случае имя файла не будет напечатано для совпадений, поскольку есть только один аргумент.
источник