Mesclando diretórios com base no sufixo

0

Eu tenho uma estrutura de diretórios produzida durante o arquivamento. O sistema de arquivamento não pode ser alterado. Sempre que um diretório duplicado ocorre, o arquivador anexa um sufixo inteiro ao nome do diretório. Meu objetivo é reduzi-los para que haja apenas um diretório por nome (sem sufixos) e os subdiretórios sejam mesclados.

# Current Structure
/
+-- Folder_Name/
    +-- 20170913/
        +-- File One
+-- Folder_Name_1/
    +-- 20170913/
        +-- File One
        +-- File Two
+-- Folder_Name_2/
    +-- 20170915/
        +-- File Three
+-- Folder_Name_3/
    +-- 20170918/
        +-- File Four

# What I would like to achieve
/
+-- Folder_Name/
    +-- 20170913/
        +-- File One
        +-- File Two
    +-- 20170915/
        +-- File Three
    +-- 20170918/
        +-- File Four

Muitas pastas são criadas durante o arquivamento (é uma máquina de ultra-som salvando um backup mensal de todas as imagens) e muitas vezes há cópias produzidas. Ao mesmo tempo, estou usando o ImageMagick para converter os arquivos de bitmap em png, a fim de manter o tamanho dos arquivos.

Eu tentei fazer isso com rsync usando a opção --remove-source-files, mas não consegui encontrar uma maneira de combinar esses diretórios com rsync (não acho suporta regex). Em seguida, tentei usar find para canalizar a saída para rsync , mas não consigo calcular a) a regex que conseguiria isso; eb) como fornecer os nomes de diretórios com e sem sufixos. Estou pensando que preciso usar variáveis para isso, mas não tenho experiência com scripts de shell.

Estou tomando a abordagem correta aqui? Em caso afirmativo, alguém poderia me indicar um recurso ou tutorial que possa me ajudar a configurar isso? Se não, então, quais ferramentas devo usar?

    
por walkerbox 19.09.2017 / 13:21

1 resposta

0

Tenho certeza que um simples

cp -R Folder_Name_*/* Folder_Name

fará toda a mesclagem para você. Depois de verificar o resultado, você pode remover os diretórios de origem.

Se você tiver várias pastas para mesclar, crie um loop for em torno dele:

for folder in *_1; do
  folder="${folder%_*}"
  cp -R "$folder"_* "$folder"
  # rm -rf "$folder"_*
done

( rm comentou até ser verificado)

    
por 19.09.2017 / 13:49