Еквівалентна команда для копіювання бінарних файлів


24

У мене є купа бінарних файлів, і я знаю, що всередині цих бінарних файлів є рядки, які я хочу знайти.

Я хочу зробити:

grep -lir "the string I am looking for"

і отримати список усіх бінарних файлів всередині певного каталогу, які містять цей рядок, але grep -lir , мабуть, не працює з цими файлами.

Чи є команда, яка може здійснити такий вид пошуку через термінал?

Відповіді:


24

За допомогою GNU grep , ви можете використовувати -a варіант, щоб він розглядав двійкові файли як текстові файли:

grep -ali -- string file

Якщо ваша версія grep не підтримує -a, ви можете використовувати натомість ack . З ack 1.x вам потрібно включити -aопцію, а ack 2.x, ви цього не зробите, оскільки при пошуку включайте нетекстовий файл за замовчуванням (ігнорується лише нетекстовий файл, коли ви не вказали жодних файлів).


Чи я неправильно читаю ackсамоопис? (у посібнику) "ack 2.x буде шукати кожен звичайний, не двійковий файл, який явно не ігнорується [bla bla blah" "Отже, це здається, що ack 2.x все одно повинен перестати читати файл рано, якщо вміст виглядає двійкові.
Пітер Кордес

1
@PeterCordes: Це сталося, коли жодні файли не були вибрані. Спробуйте, ack grep /bin/grepі ви отримаєте результат. Я оновив свою відповідь, щоб не плутати.
cuonglm

1
Спробуйте скористатися командою strings, щоб отримати рядки з двійкового файлу.
Uwe Burger

23

Команда stringsвитягує всі дані ascii з файлу, якщо потім grepвивести його, ви можете шукати свої дані:

strings <filename> | grep "search text"

Це має бути прийнятою відповіддю. Цей двійковий файл добре підходить для цього завдання.
Владислав Довгалеч

5
@xeon: Це не завжди добре використовувати strings, читайте тут для отримання більш детальної інформації.
cuonglm

1
Оскільки мета - визначити, які бінарні файли містять рядок, strings -fбуло б більш доцільним.
jamesdlin

Це краща відповідь.
Xofo

9

Ваше запитання стосується пошуку бінарних файлів, що містять шаблон (і у нас вже дуже хороші відповіді!). Доповненням ми можемо хотіти отримати події.

Я часто використовую

grep -aPo '.{0,20}pattern.{0,20}'  binfile

щоб отримати навколишній контекст 20-ти знаків.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.