Como eu poderia executar o comando -exec on find after | grep

0

Estou em uma máquina remota tentando mover todos os arquivos loader.gif para uma pasta /Pictures

find . -iname *.gif | grep loader mostra quatro arquivos que eu gostaria de mover, naturalmente eu tentei: find . -iname *.gif | grep loader -exec cp *.gif /home/me/

Como posso copiar todos os arquivos que correspondem aos meus critérios de loader.gif por meio de um comando find e grep ? (Estou usando grep porque os resultados do comando original find mostram TODOS os arquivos .gif , mas desejo apenas loader.gif nomes de arquivos)

    
por phillipsk 03.08.2015 / 14:34

2 respostas

2

GNUly:

find . -iname '*.gif' -print0 | grep -z loader | xargs -r0 cp -t /home/me

POSIXly:

find . -name '*.[gG][iI][fF]' -path '*loader*' -exec sh -c '
  exec cp "$@" /home/me' sh {} +

(Eu usei -path para ser equivalente à solução grep , mas parece que você quer que loader seja encontrado no nome do arquivo, ao contrário de seus componentes de diretório, caso em que você deve use -name ).

Observe que -iname '*.gif' pode não corresponder em .GIF em uma localidade em que% bac_de% é i em vez de İ (como locais turcos em sistemas GNU).

    
por 03.08.2015 / 14:40
1

Acho que xargs é a solução mais simples e direta:

find . -iname *.gif | grep loader | xargs cp -t /home/me
    
por 03.08.2015 / 17:42

Tags