Copie arquivos que correspondam parcialmente a outros arquivos em outro local

2

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 fo01 , 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

alguns dos ccc_foo#_c_### renomeados serão copiados manualmente para o diretório ccc . O que eu quero fazer é verificar esses arquivos copiados manualmente e copiar os d_foo#_d_### e lll_foo#_l_### nos diretórios ddd e lll , respectivamente. Por exemplo, se eu copiei ccc_fo01_c_001.jpeg e ccc_fo02_c_000.jpeg para a pasta ccc , meu script deve copiar:

  • ddd_fo01_d_001.jpeg e ddd_fo02_d_000.jpeg para o ddd
  • lll_fo01_l_001.jpeg e l_fo02_l_000.jpeg para o lll
por Tak 13.03.2015 / 00:02

1 resposta

2

No bash:

for x in ccc/*; do
  [ -f "$x" ] || continue                  # skip directories in ccc
  y=${x#*_}                                # strip the ccc_ prefix
  cp -p ddd/*/ddd_"${y/_c_/_d_}" ddd/      # copy the corresponding file under ddd
  cp -p lll/*/lll_"${y/_c_/_l_}" lll/      # ditto under lll
done

Este script pressupõe que você não possui, por exemplo, fo03 arquivos em um diretório fo01 , ou se você os tiver, você deseja copiá-los mesmo assim. Se este não for o caso, você pode querer ajustar a manipulação do nome do arquivo para corresponder ao seu cenário exato.

Você pode querer investigar os recursos de expansão de parâmetros do bash para obter mais informação.

    
por 13.03.2015 / 00:37