У меня есть вопрос относительно конкатенации двух процессов в терминале. У меня есть папка с более чем 50 000 файлов. Я использовал grep для поиска тех файлов, содержащих конкретный термин:
grep -inrl "Bioethik_Debatte" /var/cqp/upload/heideko/import_files
который дает мне огромный список как это:
/var/cqp/upload/heideko/import_files/26629.vrt
/var/cqp/upload/heideko/import_files/32862.vrt
Я должен скопировать получающиеся файлы в новую папку. Я думал что-то как:
grep -inrl "Bioethik_Debatte" /var/cqp/upload/heideko/import_files | cp * bio_files/
Моя попытка не могла бы иметь никакого смысла. Я только запускаю с терминала. Я просто хочу скопировать файлы, следующие из моего поиска grep в новую папку, названную bio_files. Я понял, что то, что я получаю от grep, является просто названиями файлов. Но я хочу использовать те имена в качестве входа для команды CP. Любая справка высоко ценится.
Использовать xargs
и -t
опция cp
:
grep -inrl "Bioethik_Debatte" /var/cqp/upload/heideko/import_files | xargs cp -t bio_files/
Если Ваши файлы могли бы иметь пробелы на свои имена, то сделайте все разграниченным пустым указателем:
grep -inrlZ "Bioethik_Debatte" /var/cqp/upload/heideko/import_files | xargs -0 cp -t bio_files/