Pular para o conteúdo
  • Denunciar
  • Indicar

1. pipe e cp

Enviado em 06/06/2011 - 17:24h

Olá pessoal do VOL,
Estou precisando criar um script que copie arquivos para um diretório da segunte forma:
todo arquivo que tem o 'PIPE' no nome deve ser copiado para o diretório /home/pipe/
querendo usar o script da seguinte forma
find | grep pipe | cp /home/pipe/;
No entanto está havendo problema no uso de | e cp. O script não faz o esperado. Creio que porque | direciona a saída para o início do comando e eu gostaria que ele ficasse como primeiro parametro (origem) de cp.
Alguém tem uma dica do que posso fazer pra resolver isso?

Responder tópico

2. Re: pipe e cp

Enviado em 07/06/2011 - 12:51h

Cara, eu faria assim:

find -type f -name '*pipe*' -exec cp {} /home/pipe/ \;

3. Re: pipe e cp

Enviado em 07/06/2011 - 21:13h

find: faltando argumento para `-exec'

Cara, eu sou iniciante ainda, você pode me descrever o que seu script faria [parâmetros]?

4. Re: pipe e cp

Enviado em 07/06/2011 - 23:04h

Até o grep tudo bem, mas o cp necessita argumento.
O que você pode fazer é algo assim:
find | grep pipe| while read arquivo; do cp $arquivo /home/pipe/; done

5. Re: pipe e cp

Enviado em 08/06/2011 - 11:10h

É ... realmente parece que o comando é diferente dependendo do SO.

No Debian funciona bem o comando:

find -type f -name '*pipe*' -exec cp {} /home/pipe/ \;

-type f => tipo de arquivo, apenas arquivos ... ignora diretorios
-name '*pipe*' => nome do arquivo
-exec => executa o comando a seguir
cp {} /home/pipe/ => copia o resultado do find (por isso o {}) para o diretório /home/pipe/
\; => fecha comando ... é obrigatorio

No solaris eu precisei colocar o ".", se não dá erro.
find . -name '*pipe*' -type f -exec cp {} /home/pipe/ \;

Agora na sua distro eu não tenho nenhuma maquina pra testar, da uma olhada no man.
O loop proposto não é uma má idéia, também funciona, ... mas serão 3 comandos ... find ... grep ... cp, pela lógica vai demorar um pouco mais, mas vai funcionar muito bem.

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder