Eu tenho batido minha cabeça contra isso por um tempo, mas eu realmente não sou um bom roteirista. Desculpas...
Estou executando o Ubuntu/gnome 18.10 e tenho um grande conjunto de imagens exportadas do mac da minha esposa. A estrutura do diretório é:
year1
(login dir name with spaces) - Month
Image names
year2
...
como em:
2013
May 4, 2013
Image1.jpg
Image2.jpg
May 5, 2013
Image 1.jpg
Image 3.jpg
June 22, 2013
O que eu gostaria, é:
2013
January
All the "january" images...
February
All the...
Posso criar os diretórios com bastante facilidade mkdir {January..December}
. Mas não consigo descobrir como percorrer a árvore de diretórios feia (exportada do Mac), mover as imagens e excluir o diretório feio.
Existe um aplicativo que pode mover e renomear os arquivos em uma única linha de comando -
exiftool
No meu caso, a linha de comando específica usada foi
ou
dependendo de qual tag está presente nas imagens. Se a tag solicitada não estiver presente, o aplicativo emite um aviso e não move esse arquivo, mas continua processando. Este aplicativo também lida com várias imagens com a mesma data/hora, acrescentando um número ao final do nome do arquivo.
Eu tinha várias imagens sem dados exif e consegui adicionar dados exif às imagens com o comando
Como exemplo, coloquei algumas imagens em um diretório ~/aa/test1 e executei a ferramenta, colocando a saída em ~/aa/test2. Os resultados estão abaixo:
Aqui está esse script:
O script deve ser executado no diretório de primeiro nível onde suas imagens estão localizadas. Você deve ajustar o diretório de destino -
DEST="/tmp/new-order-pictures/"
. Esta versão do script depende de que todos os arquivos estejam em diretórios que contenham o nome de um mês de uma forma ou de outra. Exemplo de uso:No meu caso, o script é nomeado
order.sh
e está localizado em~/bin
, portanto, posso usá-lo como comando do shell. No exemplo, você pode ver que a estrutura do diretório foi alterada, mas o número de arquivos é 14 em ambas as estruturas.Aqui está outra versão do script que usa
mv
em vez decp
e vai lidar também com os arquivos que não estão em diretórios que contenham o nome de um mês. Antes de executar este script, é uma boa ideia criar uma cópia de backup da estrutura de diretório original.Exemplo de uso:
Depois disso, você pode entrar no diretório de destino e usar o
rename
comando dentrofor
do loop para lidar com os nomes longos:Exemplo:
Ou você pode mudar
(\.[0-9a-zA-Z]+)
com(\.jpg)
, então na próxima iteração com(\.mpg)
(respectivamenteImage-
comVideo-
), etc. Referências sobre o uso derename
:Como renomear vários arquivos sequencialmente na linha de comando?
Renomear centenas de arquivos de uma só vez para classificação adequada
Portanto, presumo que você queira uma solução simples e passo a passo. Primeiro, abordaria o problema de espaço em branco e vírgula nas pastas. Eu primeiro colocaria o CD na pasta do ano e usaria
rename
para primeiro remover o espaço em brancoDa mesma forma, remova a vírgula
Agora que tenho todas as pastas desejadas, criaria uma lista mensal usando
Agora crie a pasta "janeiro"
Em seguida, percorra a lista usando
xargs
para copiar seu conteúdo