Como copiar todos os arquivos de forma recursiva, excluindo as pastas em uma pasta de destino?

2

Eu tenho várias pastas como /music/1/a.mp3 e /music/2/b.mp3

Todos os nomes dos arquivos têm a garantia de serem diferentes.

Existe uma maneira, provavelmente usando o Terminal, para copiar esses arquivos para /musicTemp/ , excluindo as pastas?

Em outras palavras, o resultado dos dois exemplos acima deve ser:

/music/1/a.mp3
/music/2/b.mp3

para:

/musicTemp/a.mp3
/musicTemp/b.mp3
    
por samiles 07.03.2013 / 22:50

2 respostas

4

O comando find encontrará todos os arquivos do padrão especificado (-name), neste caso, um tipo de arquivo específico: *.mp3 . -exec faz com que todos os argumentos a seguir sejam encontrados como argumentos para o comando até que um argumento consistindo em ; seja encontrado (no final, com escape literal para impedir a expansão pelo shell). Nesse caso, o comando que desejamos executar é uma cópia de arquivo ( cp ) nos arquivos que correspondem ao padrão ( {} ) e copie esses arquivos para /destination_dir . Este comando deve fazer o truque:

find /music -name "*.mp3" -type file -exec cp {} /destination_dir \;
    
por 07.03.2013 / 23:13
3

Se você tiver o Bash instalado 4 , você pode adicionar shopt -s globstar ao .bash_profile e executá-lo:

cp /music/**/*.mp3 /musicTemp/
    
por 08.03.2013 / 01:59

Tags