С Новым годом! Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 2
1

Найти все файлы содержащие в себе свое же имя

17.10.2017, 21:28. Показов 2046. Ответов 4

Author24 — интернет-сервис помощи студентам
Доброго времени суток, господа.

Мне поставили задачу - реализовать поиск текстовых файлов во каталоге и всех подкаталогах, в тексте которых содержится имя самого файла. (Например в файле file1.txt нашлось file1, в abrakadabra.txt - abrakadabra и т.д.)

Есть ли возможность искать одновременно и файлы и проверять их содержимое? Я смутно представляю себе, что нужно использовать grep -r дабы рекурсивно пройтись по всем файлам в каталоге. Но вот искомая фраза все время меняется - как с этим быть? Или я совсем не туда думаю и нужно использовать find. Ведь grep же не ищет в подкаталогах?

Заранее благодарю за помощь. Совсем мозг стёр с этим.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.10.2017, 21:28
Ответы с готовыми решениями:

Как создаются проекты, содержащие в себе разные файлы?
Мне нужно создать файл-проект который будет ассоциироваться с программой и содержащий различные...

Вывести все слова из файла, содержащие в себе слово red
Необходимо вывести все слова из файла, содержащие в себе слово red Вот код: #include...

Найти все файлы с данным разрешением и вывести их имя и размер
эта программа работает и выдает правильный результат, если файлы *.jpg находятся в папке с...

Найти и вывести все файлы имя которых начинается с указанной буквы
Доброго времени суток. Помогите с лабой пож-та. Дан только этот код. Как я понимаю эта программа...

4
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
17.10.2017, 21:43 2
Bash
1
find -type f -exec bash -c 'fname=$(basename $0) ; grep -Il "${fname%.*}" $0' {} \;
2
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
17.10.2017, 21:50 3
grep может искать в подкаталогах (опция -r), но в данном случае, действительно, всё время меняется искомая строка. Почему не вызывать grep отдельно для каждого найденного файла? В баше искать файлы можно find-ом, но вряд ли получится короче, чем в zsh:
Bash
1
for f (**/*(.D)) grep -Il ${f:t} $f
  • for ... (...) ... ― короткая форма for для однострочников
  • ** ― рекурсивный глоб для текущей директории и поддиректорий
  • (.D) ― точка значит, что искать только регулярные файлы, а D ― что включать и скрытые файлы
  • ${f:t} ― взять только последнюю компоненту имени файла f (то есть если f имеет значение foo/bar/baz, то ${f:t} раскрывается в baz), это имя файла, которое ищем grep-ом
  • $f ― при раскрытии переменных в zsh можно не писать кавычки
2
0 / 0 / 0
Регистрация: 17.10.2017
Сообщений: 2
17.10.2017, 23:32  [ТС] 4
Прошу прощения за надоедливость, но хочется все-таки понять что происходит в написаном Вами коде. Я не из тех, кому нужно gimme da codes. Мне правда интересно понять принцип.

Что я понял:
find -type f - искать только обычные файлы
exec bash - выполнить скрипт записаный в строке после -c
fname=$(basename $0) - вот тут если можно поподробнее. Интуитивно понимаю, что fname присваивается имя файла, но как это работает? Применяется на каждый файл отдельно?

grep -Il '$fname%.*" '$0' {} - Вообще ничего неясно, кроме очевидных параметров для грепа.

Заранее благодарен за ответ.
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
18.10.2017, 15:57 5
А самому?
Цитата Сообщение от man bash
Код
-c     If the -c option is present, then commands are read from the first non-option argument command_string.  If
       there are arguments after the command_string, the first argument is assigned to $0 and any remaining argu‐
       ments are assigned to the positional parameters.  The assignment to $0 sets the name of the  shell,  which
       is used in warning and error messages.
…
${parameter%word}
${parameter%%word}
       Remove matching suffix pattern.  The word is expanded to produce a pattern just as in pathname expansion.  If
       the  pattern  matches a trailing portion of the expanded value of parameter, then the result of the expansion
       is the expanded value of parameter with the shortest matching pattern (the ``%'' case) or the longest  match‐
       ing  pattern  (the ``%%'' case) deleted.  If parameter is @ or *, the pattern removal operation is applied to
       each positional parameter in turn, and the expansion is the resultant list.  If parameter is an  array  vari‐
       able  subscripted  with @ or *, the pattern removal operation is applied to each member of the array in turn,
       and the expansion is the resultant list.
0
18.10.2017, 15:57
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2017, 15:57
Помогаю со студенческими работами здесь

Найти первые 20 слов из текста, содержащие в себе введённое слово
Дан большой текст в виде текстового файла, например, роман Толстого Л.Н. «Война и мир»....

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

Во втором каталоге которой указан в переменной PATH найти все файлы содержащие в названии букву "b"
Здравствуйте, поставлена такая задача: "Во втором каталоге которой указан в переменной PATH найти...

Ввести фамилию, имя, отчество. Вывести свое имя в столбик
Ввести фамилию, имя, отчество. Вывести свое имя в столбик.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru