copiando arquivos resultantes do uso do grep em uma nova pasta

0

Eu tenho uma pergunta sobre a concatenação de dois processos no terminal. Eu tenho uma pasta com mais de 50.000 arquivos. Eu usei o grep para procurar por esses arquivos contendo um termo específico:

grep -inrl "Bioethik_Debatte" /var/cqp/upload/heideko/import_files

que me dá uma lista enorme como esta:

/var/cqp/upload/heideko/import_files/26629.vrt
/var/cqp/upload/heideko/import_files/32862.vrt

Eu preciso copiar os arquivos resultantes para uma nova pasta. Eu estava pensando em algo como:

grep -inrl "Bioethik_Debatte" /var/cqp/upload/heideko/import_files | cp * bio_files/

Minha tentativa pode não fazer sentido. Eu estou apenas começando com o terminal. Eu só quero copiar os arquivos resultantes da minha pesquisa grep em uma nova pasta chamada bio_files. Eu percebi que o que eu recebo do grep são apenas os nomes dos arquivos. Mas eu quero usar esses nomes como entrada para o comando cp. Qualquer ajuda é muito apreciada.

    
por Carolina Cárdenas 15.05.2018 / 18:00

1 resposta

3

Use xargs e a opção -t de cp :

grep -inrl "Bioethik_Debatte" /var/cqp/upload/heideko/import_files | xargs cp -t bio_files/

Se seus arquivos puderem ter espaços em seus nomes, faça tudo delimitado por nulo:

grep -inrlZ "Bioethik_Debatte" /var/cqp/upload/heideko/import_files | xargs -0 cp -t bio_files/
    
por steeldriver 15.05.2018 / 18:11