Ele pode ser alcançado na linha de comando, mas um script que seria executado na linha de comando seria uma solução mais fácil (eu acho).
etapas básicas:
1 Obtenha uma lista de diretórios para iterar
- find ${directory} -mindepth 1 -type d
2 Verifique cada diretório quanto à presença de um arquivo config.ini e um arquivo image.jpg.
- if [ -f ${subdir}/config.ini -a -f ${subdir}/image.jpg ]; then ...
3 Verifique o config.ini para todas as partes certas do timestamp.
- vários grep ^Year= ${subdir}/config.ini
ou ^Month
, etc ...
4 Faça uma cópia do arquivo image.jpg usando o timestamp.
- cp ${subdir}/image.jpg ${copydir}/${timestamp}.jpg
Acho mais fácil e potencialmente mais seguro colocar essas sequências em um script, onde você pode colocar mais facilmente resultados legíveis, tratamento de erros, etc.
Veja um script de exemplo para realizar essas etapas:
#!/bin/bash
imagepath="/path/to/images"
copydir="/path/to/copies"
# step 1: find all the directories
for dir in $(find ${imagepath} -mindepth 1 -type d); do
echo "Procesing directory $dir:"
ci=${dir}/config.ini
jp=${dir}/image.jpg
# step 2: check for config.ini and image.jpg
if [ -f ${ci} -a -f ${jp} ]; then
# step 3: get the parts of the timestamp
year=$(grep ^Year= ${ci} | cut -d= -f2)
month=$(grep ^Month= ${ci} | cut -d= -f2)
day=$(grep ^Day= ${ci} | cut -d= -f2)
hour=$(grep ^Hour= ${ci} | cut -d= -f2)
min=$(grep ^Minute= ${ci} | cut -d= -f2)
sec=$(grep ^Second= ${ci} | cut -d= -f2)
ms=$(grep ^Milliseconds= ${ci} | cut -d= -f2)
# if any timestamp part is empty, don't copy the file
# instead, write a note, and we can check it manually
if [[ -z ${year} || -z ${month} || -z ${day} || -z ${hour} || -z ${min} || -z ${sec} || -z ${ms} ]]; then
echo "Date variables not as expected in ${ci}!"
else
# step 4: copy file
# if we got here, all the files are there, and the config.ini
# had all the timestamp parts.
tsfile="${year}-${month}-${day}T${hour}:${min}:${sec}:${ms}.jpg"
target="${copydir}/${tsfile}"
echo -n "Archiving ${jp} to ${target}: "
st=$(cp ${jp} ${target} 2>&1)
# capture the status and alert if there's an error
if (( $? == 0 )); then
echo "[ ok ]"
else
echo "[ err ]"
fi
[ ! -z $st ] && echo $st
fi
else
# other side of step2... some file is missing...
# manual check recommended, no action taken
echo "No config.ini or image.jpeg in ${dir}!"
fi
echo "---------------------"
done
É sempre bom ser um pouco conservador com scripts como esse, para que você não apague arquivos acidentalmente. Esse script faz apenas 1 ação de cópia, de modo que é bastante conservador e não deve prejudicar seus arquivos de origem. Mas você pode querer alterar ações específicas ou enviar mensagens para melhor atender às suas necessidades.