Редактировать: После того, как все прояснилось (см. Комментарий) ...
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
.Когда вы присваиваете значение переменной, вы просто пишете имя переменной.Когда вы хотите получить значение переменной, вы ставите $
перед ней.