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
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.
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
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.
Tags bash files shell-script timestamps