Mover arquivos para diretórios com nomes após os primeiros 6 dígitos no nome do arquivo

2

Tenho milhares de fotos não processadas ( .nef ) e configurações relativas (mesmo nome de arquivo, mas .xmp extensão) em um único diretório em um QNAP nas. Meu objetivo é automatizar a criação de subdiretórios nomeados como yyyy-mm ou sen yyyy/mm e mover todos os arquivos de acordo. Todos os nomes de arquivos são como yyyy-mm-dd_hhmmss-###.nef ou yyyy-mm-dd_hhmmss-###.xmp , em que ### são milissegundos.
Sinto muito, mas meu conhecimento de script é quase nulo.

    
por Francesco Bacigalupo 26.03.2018 / 21:04

3 respostas

3

Se você souber os anos em que os nomes desses arquivos se expandem, você poderá simplesmente forçar:

for year in {1996..2018}; do
    for month in {01..12}; do
        mkdir -p ${year}-${month}
        for filetype in nef xmp; do
            mv ${year}-${month}*.${filetype} ${year}-${month}/
        done
    done
done
    
por 26.03.2018 / 21:17
1

Aqui está uma solução baseada em loop com o conjunto de comandos restrito disponível em um QNAP padrão:

#!/bin/bash
for file in ????-??-??_*.{nef,xmp}
do
    yyyymm=${file/-??_*}
    echo mkdir -p "$yyyymm"
    echo mv -f "$file" "$yyyymm/"
done

Coloque isso em um arquivo como /root/fixup , mude para o diretório que contém seus muitos arquivos e execute bash /root/fixup . Ele criará os diretórios yyyy-mm sob demanda, com base nos nomes de arquivos que está processando.

Como está escrito, ele não fará alterações. Quando você estiver satisfeito porque parece que vai funcionar, remova a palavra echo das duas linhas próximas ao final do script. / p>     
por 26.03.2018 / 23:45
0

Se você estiver procurando simplesmente criar diretórios em massa seguindo um padrão que você possa usar:

mkdir -p ~/{0001,0002,0003,...,XXXX}/{01,02,03,...,XX}

Certifique-se de substituir as variáveis com valores que você realmente deseja usar. Assim, um exemplo para criar um subdiretório para anos, meses e dias seria assim:

mkdir -p ~/{1998..2018}/{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}/{01..31}

Depois, você pode pesquisar os meses que não têm 31 dias e removê-los conforme descrito em este post . Depois disso, você tem a tarefa de classificar as fotos nos diretórios adequados. Isso é feito de forma muito semelhante a encontrar e excluir e é descrito em este post .

Por favor, note que isso irá criar os subdiretórios em seu diretório de trabalho atual. Como mencionado pelo usuário DopeGhoti, você pode criar um loop para concluir cada etapa de uma vez. Melhor da sorte!

    
por 26.03.2018 / 21:23