Como mover a saída do comando find para outro diretório?

6

Eu quero a saída deste comando find /home -name *.pdf para mover os arquivos no resultado da pesquisa para outro diretório, por exemplo, com um cano. Como posso fazer isso?

    
por Fasih Faqoth 25.11.2016 / 17:50

2 respostas

13

Você não precisa de nenhum pipe e xargs para fazer os nomes dos arquivos como argumentos para mv .

Use apenas mv na ação -exec de find :

find /home -type f -name '*.pdf' -exec mv -t /destination {} + 
  • Substitua /destination pelo diretório de destino real
  • find lidará com todos os nomes de arquivos possíveis
  • find processará ARG_MAX passando quantos nomes de arquivo de uma só vez, para que não acione ARG_MAX
  • Se você estiver procurando apenas arquivos (presumivelmente, neste caso), limite o vetor de pesquisa adicionando -type f
  • Cite a expansão glob, '*.pdf' , para que o shell não os expanda antecipadamente, pois find os manipulará

Se por algum motivo estranho, ou para fins de aprendizado, você deve usar pipe xargs :

find /home -type f -name '*.pdf' -print0 | xargs -0 mv -t /destination  
    
por heemayl 25.11.2016 / 17:53
0

Se você não tem espaços nos nomes dos seus PDF's, outra maneira de fazer isso é executar este comando no seu terminal:

mv $(find /home -type f -name '*.pdf') ./destination

O $() aplica a saída do comando executado ( find /home -type f -name '*.pdf' ) ao comando fora dele ( mv [...] ./destination ).

    
por anonymous2 25.11.2016 / 22:03