Como posso usar “mv” para reunir todos os arquivos encontrados por “find” na mesma pasta?

2

Eu posso encontrar todos os arquivos que eu quero usando find , mas eu quero usar mv para movê-los para uma determinada pasta. Como posso fazer isso?

    
por SarpSTA 10.11.2015 / 22:52

2 respostas

8

Uma leve inclinação, cp e mv suportam um argumento -t de destino que permite iniciar com o destino e finalizar o comando com uma longa lista de coisas para copiar ou mover. Isso se presta perfeitamente a coisas como find -exec ... {} + , que irá construir um longo comando de forma eficiente. Muito mais que find -exec ... {} \;

find . -type f -exec mv -t /new/path {} +
    
por Oli 11.11.2015 / 00:44
0

Aproximação clássica - find + while loop

 find /your/top/directory -maxdepth 1 -type f -print0 | while IFS="" read -r -d "" FILENAME; do mv -t /path/to/destination/directory  "$FILENAME";done

Explicação:

  • find fornece a lista de arquivos (indicada por -type para ignorar diretórios) em /your/top/directory , desce no nível máximo de 1 na estrutura de diretórios e imprime a saída como uma cadeia separada por nulo;
  • while loop em conjunto com read toma cada parte dessa string separada por nulo e armazena-a na variável FILENAME.
  • mv exibe o arquivo atual no diretório de destino indicado por -t flag.

Essa abordagem é muito útil quando você deseja evitar a análise de ls output e, na verdade, eu aprendi aqui .

    
por Sergiy Kolodyazhnyy 11.11.2015 / 00:11