Как найти файлы с определенным шаблоном в родительском и дочернем каталоге моего текущего рабочего каталога с помощью одной команды?
Имя файла – test.txt , файл имеет шаблон nslookup
Этот файл присутствует в 3 каталогах, и они / home , / home / 1 и / home / 1/2
Я сейчас нахожусь в / home / 1 . Я попробовал ниже команды:
find ../ -type f -name "test.txt"
Выход :
../test.txt ../home/1/test.txt ../home/1/2/test.txt
Мне удалось найти файлы, поэтому я попробовал следующую команду:
$ find ../ -type f -exec grep "nslookup" {} \; nslookup nslookup nslookup
Это не отображает имена файлов.
Команда:
find . -type f -name "test.txt" | xargs grep "nslookup"
==> дает мне файлы в pwd и дочерних каталогах:
./1/test.txt:nslookup ./test.txt:nslookup
но когда я пытаюсь найти в родительском каталоге, как показано ниже, результаты ошибочны:
find ../ -type f -name "test.txt" | xargs grep "nslookup" User@User-PC ~/test $ uname -a CYGWIN_NT-6.1 User-PC 2.5.2(0.297/5/3) 2016-06-23 14:29 x86_64 Cygwin
Ваша команда
find ../ -type f -exec grep "nslookup" {} \;
это почти правильно, за исключением того, что grep
по умолчанию не отображает имя файла, когда ему дается только один файл для работы.
Вот два способа исправить это:
Используя grep
который имеет нестандартную (но общую) опцию -H
всегда отображать имя файла:
find ../ -type f -exec grep -H 'nslookup' {} \;
Предоставляем grep
как минимум два имени файла:
find ../ -type f -exec grep 'nslookup' /dev/null {} \;
Если вас интересуют только имена файлов, то есть два способа сделать это:
Используйте стандартную опцию -l
с grep
:
find ../ -type f -exec grep -l 'nslookup' {} \;
Пусть find
выведет путь к файлу, если он содержит совпадение:
find ../ -type f -exec grep -q 'nslookup' {} \; -print
Здесь мы используем только grep
для определения соответствия шаблона. Его опция -q
останавливает вывод чего-либо, и команда find
будет использовать состояние выхода утилиты, чтобы определить, следует ли выполнять действие -print
или нет.