LINUX.ORG.RU

Как найти файл, в котором содержится определённый текст, через командную строку

 , ,


1

2

В общем, вопрос обозначен в заголовке. Пробовал разные конструкции с find, о которых описано в гугле — вроде как ничего не подошло. Gnome Search работает отлично, но мне нужно терминальное решение.
Я неправильно описал задачу, не совсем правильно.
Нужно: найти файл, содержащий искомый текст и выполнить с этим файлом операцию (например, копирование в определённую папку).

★★★★★

Последнее исправление: Desmond_Hume (всего исправлений: 2)

Попробуй разные конструкции с grep, «о которых описано» в man grep.

thesis ★★★★★
()
mv `grep -L -R op_4utau_man path/to/directory` /destination/

Можно например так, если файлов немного и в путях нет пробелов

omnomnomnus
()
Ответ на: комментарий от redgremlin

Опция -l выдаст файлы с найденным вхождением.

anonymous
()
Ответ на: комментарий от Desmond_Hume

grep -ilrn root /etc - поиск слова root во всех файлах директории etc

axelroot
()

найти файл, содержащий искомый текст и выполнить с этим файлом операцию (например, копирование в определённую папку).

cp `grep -ilrn root /etc` ./copy/

axelroot
()

Вышеописанные способы исполнения команды не будут работать если в имени файла содержится пробел, табуляция или какие-нибудь спец-символы баша.
Для передачи аргументов рекомендую разделять их байтом \0 или на худой конец переносом строки. Например так (с байтами \0):

grep -lRZ 'test' /tmp/ | xargs -0 cp --target-directory=/home/backup/
или так (с переносом строки):
grep -lR 'test' /tmp/ | xargs -d '\n' ls -l

Nao ★★★★★
()

Всем спасибо! Буду пробовать... отпишусь позже.

Desmond_Hume ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.