Найти файлы, содержащие определенную строку, и скопировать в каталог, используя Linux - PullRequest
0 голосов
/ 22 сентября 2018

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

Мой сценарий, который я пытаюсь использовать

grep *Qtr_1_results*; cp /data/jobs/file/obj1

Я не могу скопировать, и выводится сообщение:

Usage: cp [-fhipHILPU][-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src target
       or: cp [-fhipHILPU] [-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src1 ... srcN directory

1 Ответ

0 голосов
/ 22 сентября 2018

Редактировать: После того, как все прояснилось (см. Комментарий) ...

cp *Qtr_1_results* /data/jobs/file/obj1

То, что вы делаете, это просто жадность.С ; вы завершаете команду, а cp печатает сообщение об ошибке, потому что вы указываете только источник, а не адресата.

Что вы хотите сделать, это следующее.Сначала вы хотите использовать grep для имени файла, а не для строки (которую вы не указали).

grep -l the_string_you_are_looking_for *Qtr_1_results*

Опция -l дает вам имя файла вместо строки, где находится the_string_you_are_looking_for.В этом случае grep будет искать во всех файлах, где имя файла содержит Qtr_1_results.

Затем вы хотите отправить вывод grep в цикл while для его обработки.Вы делаете это с трубкой (|).Точка с запятой ; только заканчивает строки.

grep -l the_string_you_are_looking_for *Qtr_1_results* | while read -r filename; do cp $filename /path/to/your/destination/folder; done

В цикле while read -r поместит вывод grep в переменную filename.Когда вы присваиваете значение переменной, вы просто пишете имя переменной.Когда вы хотите получить значение переменной, вы ставите $ перед ней.

...