Como datar fotos ( jpg ) em lote recursivamente usando touch? ( sheel script ) [RESOLVIDO]

1. Como datar fotos ( jpg ) em lote recursivamente usando touch? ( sheel script ) [RESOLVIDO]

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 30/10/2017 - 15:39h

Oi galera, minha dúvida é essa, tenho uma estrutura de diretórios com 6.000 fotos pessoais separadas em pastas e levei semanas pra organizar:

Catalogadas - Pasta principal

- Atemporais #( subdiretório )
- 2000 #( subdiretório )
- 2001 #( subdiretório )
- 2002 #( subdiretório )
- 2003 #( subdiretório )
.
.
.
- 2017 #(ano corrente)

Dentro de cada pasta com o nome do ano, tenho mais subpastas com os nomes de eventos separados por data:
(tomando como exemplo a pasta 2017 )

- 2017

2017_02_24_Passeio_Paqueta
2017_05_07_Aniversario_ Lucas_ 5_ Anos
2017_09_03_Encontro_Amigos

O nome da pasta está no formato [ANO]_[MÊS]_[DIA]_[EVENTO], e dentro delas estão os arquivos com os nomes como no exemplo:

- 2017_05_07_Aniversario_ Lucas_ 5_ Anos

2017_05_07_Aniversario_ Lucas_ 5_ Anos_001.jpg
2017_05_07_Aniversario_ Lucas_ 5_ Anos_002.jpg
2017_05_07_Aniversario_ Lucas_ 5_ Anos_003.jpg
2017_05_07_Aniversario_ Lucas_ 5_ Anos_004.jpg
.
.
.
2017_05_07_Aniversario_ Lucas_ 5_ Anos_199.jpg

Meu objetivo é aproveitar os nomes dos arquivos para aplicar o comando "Touch", colocando em variáveis $ano, $mes e $dia os valores tirados do nome do próprio arquivo e desta forma alterar sua data de acesso e modificação de acordo com o indicado no próprio nome.

Só que eu queria fazer recursivamente deste a minha pasta raíz ( que no caso é Catalogados ) até a última foto.

Alguém pode me ajudar?




  


2. MELHOR RESPOSTA

Marcos Felipe
plimo263

(usa Ubuntu)

Enviado em 30/10/2017 - 17:04h

luizcarlos18rj escreveu:

Oi galera, minha dúvida é essa, tenho uma estrutura de diretórios com 6.000 fotos pessoais separadas em pastas e levei semanas pra organizar:

Catalogadas - Pasta principal

- Atemporais #( subdiretório )
- 2000 #( subdiretório )
- 2001 #( subdiretório )
- 2002 #( subdiretório )
- 2003 #( subdiretório )
.
.
.
- 2017 #(ano corrente)

Dentro de cada pasta com o nome do ano, tenho mais subpastas com os nomes de eventos separados por data:
(tomando como exemplo a pasta 2017 )

- 2017

2017_02_24_Passeio_Paqueta
2017_05_07_Aniversario_ Lucas_ 5_ Anos
2017_09_03_Encontro_Amigos

O nome da pasta está no formato [ANO]_[MÊS]_[DIA]_[EVENTO], e dentro delas estão os arquivos com os nomes como no exemplo:

- 2017_05_07_Aniversario_ Lucas_ 5_ Anos

2017_05_07_Aniversario_ Lucas_ 5_ Anos_001.jpg
2017_05_07_Aniversario_ Lucas_ 5_ Anos_002.jpg
2017_05_07_Aniversario_ Lucas_ 5_ Anos_003.jpg
2017_05_07_Aniversario_ Lucas_ 5_ Anos_004.jpg
.
.
.
2017_05_07_Aniversario_ Lucas_ 5_ Anos_199.jpg

Meu objetivo é aproveitar os nomes dos arquivos para aplicar o comando "Touch", colocando em variáveis $ano, $mes e $dia os valores tirados do nome do próprio arquivo e desta forma alterar sua data de acesso e modificação de acordo com o indicado no próprio nome.

Só que eu queria fazer recursivamente deste a minha pasta raíz ( que no caso é Catalogados ) até a última foto.

Alguém pode me ajudar?



Boa tarde amigo, vi seu problema e fiz simulações para testar. Elaborei este script, mas recomendo que teste e veja se é o que precisa, depois aplique para resolver seu problema.


#!/bin/bash
function diretorio(){
for subdir in "$1"/*;do
# Se for diretorio corrente ou diretorio pai, continue o loop
[ "$subdir" = "." -o "$subdir" = ".." ] && continue
## Se for um diretorio comum prossiga
if [ -d "$subdir" ]; then
# Volte a chamar a função recursivamente
diretorio "$subdir";
elif [ -f "$subdir" ]; then
# Recuperando o nome do arquivo
IFS='/' read -r -a array <<< "$subdir"
# Agora fatiando o nome do arquivo para a data
IFS='_' read -r -a arrayNovo <<< "${array[-1]}"
# Fatiando o ano, mes e dia do nome do arquivo
ano=$(echo "${arrayNovo[0]}");mes=$(echo "${arrayNovo[1]}");dia=$(echo "${arrayNovo[2]}")
# Alterando a data com touch e exibindo mensagem de log para controle.
touch -d "$ano-$mes-$dia" "$subdir";
echo "Mensagem de log Imagem com data alterada "$subdir

fi
done
}

diretorio "$1"




Dê permissão de execução e chame o script passando como argumento o diretorio inicial de busca. Exemplo, salvei o script como meu_script.sh e quero executar ele na pasta /home/ti/fulano/fotos.

$ ./meu_script.sh /home/ti/fulano/fotos


3. Mano Obrigado pela atenção.

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 06/11/2017 - 16:05h

Agradeço mesmo, o tempo despendido, a atenção e o apoio.




4. Re: Como datar fotos ( jpg ) em lote recursivamente usando touch? ( sheel script ) [RESOLVIDO]

Marcos Felipe
plimo263

(usa Ubuntu)

Enviado em 06/11/2017 - 16:20h

luizcarlos18rj escreveu:

Agradeço mesmo, o tempo despendido, a atenção e o apoio.



Valeu cara.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts