Alterando a data de modificação de um arquivo com base na data no nome do arquivo

5

Eu tenho um diretório cheio de fotos com nomes de arquivos neste formato: %código%. A data escolhida está obviamente no título do arquivo. Infelizmente a data modificada em todos os arquivos é hoje. Quero colocá-los de volta na data correta.

Estou pensando em um script IMG-20160305-WA0001.jpg que extrairia a parte da data no nome e, por exemplo, bash para cada arquivo, por vez (usando a data correta para cada um). A hora do dia não importa.

    
por Jodel 22.04.2016 / 22:37

2 respostas

7

Exemplo usando a manipulação de string bash apenas para extrair a data:

#!/bin/bash

for name in IMG-[0-9]*.jpg; do
    touch -amt ${name:4:8}0900 "$name"
done
    
por 22.04.2016 / 23:02
1

A partir do seu exemplo, supondo que todos os arquivos tenham uma data válida yyyymmdd , você pode extrair a data do nome do arquivo e aplicá-la no comando citado :

#!/bin/bash
for name in IMG-*-W*.jpg
do
    date="$(echo "$name" | sed -e 's/^IMG-//' -e 's/-W.*//')"
    touch -a -m -t ${date}0900 "$name"
done

Se algum arquivo não tiver uma data válida, isso é mais trabalho. Mas você pode testar isso no bash com uma expressão regular.

    
por 22.04.2016 / 22:41