Intereting Posts
Не удалось подключить встроенное устройство к ping что-либо в сети Ожидается, что скрипт возвращает ошибки при порождении bash-скрипта. Зачем? Что происходит с приостановленными заданиями в unix? Кросс-компиляция Python Одинарная кавычка в двойных кавычках и справочное руководство Bash Двойные мониторы и панели Перенаправление всего IP-трафика через USB-порт на фиксированный адрес В чем опасность наличия доступного для записи каталога chroot для FTP? как синхронизировать каталоги и файлы из источника в место назначения Инструменты swap / dev / mapper / * Возможно ли иметь два разных уровня громкости? udhcpd.service запущен, но процесс udhcpd не работает Как я могу загрузить функции этого файла скрипта, не загружая его каждый раз? «Команда не найдена» (основы Bash / scripting) Любой способ сделать диск (ZFS) недоступным? Что означает изменение файла / каталога?

Как найти файлы с определенным шаблоном в родительском и дочернем каталоге?

Как найти файлы с определенным шаблоном в родительском и дочернем каталоге моего текущего рабочего каталога с помощью одной команды?

Имя файла – 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 по умолчанию не отображает имя файла, когда ему дается только один файл для работы.

Вот два способа исправить это:

  1. Используя grep который имеет нестандартную (но общую) опцию -H всегда отображать имя файла:

     find ../ -type f -exec grep -H 'nslookup' {} \; 
  2. Предоставляем grep как минимум два имени файла:

     find ../ -type f -exec grep 'nslookup' /dev/null {} \; 

Если вас интересуют только имена файлов, то есть два способа сделать это:

  1. Используйте стандартную опцию -l с grep :

     find ../ -type f -exec grep -l 'nslookup' {} \; 
  2. Пусть find выведет путь к файлу, если он содержит совпадение:

     find ../ -type f -exec grep -q 'nslookup' {} \; -print 

    Здесь мы используем только grep для определения соответствия шаблона. Его опция -q останавливает вывод чего-либо, и команда find будет использовать состояние выхода утилиты, чтобы определить, следует ли выполнять действие -print или нет.