como copiar todos os arquivos que correspondem ao padrão em uma nova árvore de pastas que corresponda à mesma estrutura

como copiar todos os arquivos que correspondem ao padrão em uma nova árvore de pastas que corresponda à mesma estrutura

Eu tenho uma pasta Todos com

AllFolders
    F1
        some_file_20170315_xyz.txt
        some_file_20170314_xyz.txt
        ....
    F2
        some_other_file_20170315_abc.txt
        some_other_file_20170314_abc.txt
        ...
    ...
    Fn 

Como posso copiar todos os arquivos que correspondem a uma determinada data para uma pasta vazia diferente, para que a estrutura da pasta também seja copiada e tenha a aparência

Folder_20170315
    F1
        some_file_20170315_xyz.txt
    F2
        some_other_file_20170315_abc.txt

Responder1

Uma maneira é usar finde cp:

find . -iname '*20170315*' -exec cp --parents {} /tmp/Folder_20170315 \;

A pasta de destino já deve existir. Se desejar, você também pode criar um script para sua criação.

Parece que você deseja verificar o nome do arquivo, mas findtambém pode ser usado para verificar a data do arquivo.

Responder2

Como cp --parentsnão está disponível no Mac, usei dois comandos para resolver um problema semelhante:

find . -name '*.example' | xargs -I FOO dirname FOO | xargs -I FOO mkdir -p /new/root/directory/FOO
find . -name '*.example' | xargs -I FOO cp FOO /new/root/directory/FOO

O primeiro comando cria a árvore de diretórios. O segundo copia os arquivos.

Isso pressupõe que findseja rápido. Se findfor um gargalo de desempenho, você desejará otimizar ainda mais. Por exemplo, você poderia mover as operações para uma função.

informação relacionada