Como copiar “apenas arquivos” recursivamente

3

Suponha que eu tenha essa estrutura para folder0 e subpastas e arquivos nela.

   folder0
      subfolder01
        file011
        file012
      subfolder02
        file021
      file01
      file02

Eu quero copiar todos os arquivos na pasta principal folder0 para algum outro lugar, de modo que todos os arquivos estejam em um diretório? Como eu posso fazer isso? Eu usei

cp --recursive folder0address targetfolderaddress

Mas as subpastas são copiadas para a pasta de destino. Eu só quero todos os arquivos no diretório e subdiretórios não pastas. Quero dizer algo como o abaixo na pasta de destino:

targetfolder
  file011
  file012
  file021
  file01
  file02
    
por SirSaleh 15.03.2017 / 19:06

3 respostas

5

Use find :

find folder0 -type f -exec cp {} targetfolder \;

Com o% GNUcoreutils, você pode fazer isso de maneira mais eficiente:

find folder0 -type f -exec cp -t targetfolder {} +

A versão anterior executa cp para cada arquivo copiado, enquanto o segundo executa cp apenas uma vez.

    
por 15.03.2017 / 19:13
2

Com o zsh, graças a ** para globalização recursiva e qualificador de glob . para corresponder apenas aos arquivos regulares:

cp -p folder0/**/*(.) targetfolder
    
por 16.03.2017 / 00:34
0

Ou usando xargs

 find folder0 -type f | xargs -I {} cp -v {} targetfolder;

Use -v para mostrar o que está acontecendo.

    
por 15.03.2017 / 19:56

Tags