Copiando o conteúdo de subdiretórios em seus diretórios pai

1

Eu tenho uma lista de arquivos jpeg em um diretório como este (abaixo é apenas uma amostra, como a estrutura é a mesma, mas existem muitas sub-pastas fo0# , não apenas fo01 e fo02 , onde cada uma dessas subpastas tem muitas .jpeg imagens, não apenas duas):

.
'-- main
    |-- ccc
    |   |-- fo01
    |   |   |-- ccc_fo01_c_000.jpeg
    |   |   '-- ccc_fo01_c_001.jpeg
    |   '-- fo02
    |       |-- ccc_fo02_c_000.jpeg
    |       '-- ccc_fo02_c_001.jpeg
    |-- ddd
    |   |-- fo01
    |   |   |-- ddd_fo01_d_000.jpeg
    |   |   '-- ddd_fo01_d_001.jpeg
    |   '-- fo02
    |       |-- ddd_fo02_d_000.jpeg
    |       '-- ddd_fo02_d_001.jpeg
    '-- lll
        |-- fo01
        |   |-- lll_fo01_l_000.jpeg
        |   '-- lll_fo01_l_001.jpeg
        '-- fo02
            |-- lll_fo02_l_000.jpeg
            '-- lll_fo02_l_001.jpeg

O que eu quero fazer é fazer um loop no diretório principal em cada um dos ccc , ddd e lll , para que em cada iteração do loop as imagens jpeg de uma das subpastas sejam copiadas para o local pai. Portanto, no exemplo acima, na primeira iteração do loop, isso acontecerá:

  • ccc_fo01_c_000.jpeg e ccc_fo01_c_001.jpeg serão copiados (não movidos) de ccc/fo01 para ccc
  • ddd_fo01_d_000.jpeg e ddd_fo01_d_001.jpeg serão copiados (não movidos) de ddd/fo01 para ddd
  • lll_fo01_l_000.jpeg e lll_fo01_l_001.jpeg serão copiados (não movidos) de lll/fo01 para lll

e no final da primeira iteração, os JPEGs copiados (em ccc ddd lll ) serão excluídos de ccc ddd lll , de modo que, como se eu não tivesse feito a conversão copiando.

O mesmo acontece com todas as iterações nas subpastas. Isso significa que, no exemplo acima, o processo de exclusão e exclusão ocorrerá duas vezes, pois há dois subfloders fo01 e fo02 . Mas no meu caso existem mais subpastas. Então, se alguém puder, por favor, avise como isso pode ser feito.

    
por Tak 13.03.2015 / 07:08

1 resposta

4

Aqui está uma sugestão sobre como fazer isso:

Primeiro, faça uma iteração nas pastas, dentro de cada pasta que você pesquisar e encontre os arquivos e copie-os para sua pasta pai.

#!/bin/bash

#Iterate over the folders    
for folder in main/*
do
    #Copy the files into the folder
    find $folder -name "*.jpeg" -type f -exec cp {} $folder \; -print
done

#After its done: delete the originals
find main -mindepth 3 -name "*.jpeg" -type f -delete

Acabei de escrever uma rápida descoberta para excluir os arquivos no final. Você também pode fazer isso de dentro do loop for.

    
por stalet 13.03.2015 / 08:11