Как найти имя файла в содержимом файла с помощью сценария bash?

Я написал эту команду в своей оболочке, но она не делает то, что я хотел, и я не могу понять, что я сделал не так. Я хочу получить файлы из текущих каталогов, которые включают их имена в свое содержимое.

find -type f -exec grep -il {} +

Я понимаю, что find -type f дает мне стандартные файлы из каталога и -exec выполняет следующую команду grep с шаблоном, который является именем файла, для данного файла ('+'). Я прав? Потому что похоже я чего-то не понимаю, так как не находит мой специально созданный для этого файл.

Am I right? Действительно, шаблон - это не имя файла, а путь к файлу. my file каково точное имя файла и содержимое вашего файла?
KamilCuk 10.04.2022 16:07

Имя файла «plik.txt». и его содержимое включает в себя несколько строк, в том числе строки с надписью «plik.txt» и «./plik.txt».

Klaudia Adamus 10.04.2022 16:10
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
2
24
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

on given file ('+')

+ выполняет команду над найденными файлами все. {} заменяется на список файлов в текущем каталоге.

Отладка с помощью -exec echo grep -il {} +.

Вы хотите:

-exec grep -Fil {} {} ';'

Для поиска имени файла {} как шаблона в файле с именем {}. ';' завершает команду.

Я также добавил -F, чтобы интерпретировать шаблон буквально.

Вау, спасибо! Это делает свое дело. Можете ли вы также сказать мне, какая разница в одинарных кавычках вокруг точки с запятой? Я предполагаю, что на самом деле это была моя проблема, потому что я пробовал именно эту комбинацию (я имею в виду «{} {}»), но я получал ошибку отсутствия аргумента для «-exec».

Klaudia Adamus 10.04.2022 16:22
what difference make single quotes around the semicolon? разделены символом ; или символом новой строки, например echo 123 ; echo 234 ; echo 345. ; должен быть передан команде find буквально, поэтому это строка, содержащая символ ;, а не специальный разделитель оболочки, поэтому ';' или \; или ";". т.е. сравните echo 123 ';' echo 234 с echo 123 ; echo 234.
KamilCuk 10.04.2022 16:27

Значит, это должно быть буквально, чтобы grep не рассматривал это как аргумент?

Klaudia Adamus 10.04.2022 16:55
grep разбирает REGEX, если он не буквальный, например .[(*+ символы имеют особое значение. . соответствует любому символу, см. man 7 regex. Например, регулярное выражение ./plik.txt соответствует a/plikbtxt.
KamilCuk 10.04.2022 17:52

Файл в текущем каталоге test.txt

Содержимое файла включает «тест»

find . -name 'test.txt' -exec grep -i 'test' {} \;

Другие вопросы по теме