Suposição: Você não quer converter entre fusos horários, apenas simplesmente analisar o timestamp no nome do arquivo como uma string. Além disso, os três últimos dígitos são insignificantes e podem ser descartados.
Usando find
, chamando um script bash
:
find . -type f -exec bash -c '
pattern="([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})[0-9]{3}"
fmt="\"%s\",\"%s\",%4d-%02d-%02dT%02d:%02d:%02d TZ +01:00\n"
for pathname do
! [[ "${pathname##*/}" =~ $pattern ]] && continue
printf "$fmt" "${pathname%/*}" "${pathname##*/}" "${BASH_REMATCH[@]:1}"
done' bash {} + >report.csv
O comando find
alimenta todos os arquivos encontrados no diretório atual ( .
) para um script bash
curto. Se você quiser procurar um sufixo de nome de arquivo específico, adicione, e. -name '*.jpg'
antes de -exec
.
O script bash
, com anotações:
# The regular expression that we'd like to match against each pathname.
pattern="([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})[0-9]{3}"
# (year )(month )(day )(hour )(minute )(second ) last 3 digits ignored
# The format we'd like our output in (quoting the first two fields)
fmt="\"%s\",\"%s\",%4d-%02d-%02dT%02d:%02d:%02d TZ +01:00\n"
for pathname do
# If we can't match the pattern against the filename, ignore this file
! [[ "${pathname##*/}" =~ $pattern ]] && continue
# Output according to the format.
printf "$fmt" "${pathname%/*}" "${pathname##*/}" "${BASH_REMATCH[@]:1}"
done
Ao produzir, ${pathname%/*}
é o diretório do arquivo encontrado (pode ser escrito $( dirname "$pathname" )
), ${pathname##*/}
é o nome do arquivo encontrado (pode ser escrito $( basename "$pathname" )
) e ${BASH_REMATCH[@]:1}
será cada parte individual capturada pela expressão regular.
A saída do comando inteiro é gravada em report.csv
usando um redirecionamento no final do comando find
.
Exemplo:
.
'-- dir
|-- 20180612074405680_ZTRDEFO_Blackgen.jpg
|-- file20180612074405680-1.txt
|-- file20180612074405680-10.txt
|-- file20180612074405680-2.txt
|-- file20180612074405680-3.txt
|-- file20180612074405680-4.txt
|-- file20180612074405680-5.txt
|-- file20180612074405680-6.txt
|-- file20180612074405680-7.txt
|-- file20180612074405680-8.txt
|-- file20180612074405680-9.txt
'-- some-other-file
A execução do comando gera report.csv
, o que parece
"./dir","file20180612074405680-1.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","file20180612074405680-2.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","file20180612074405680-3.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","file20180612074405680-4.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","file20180612074405680-5.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","file20180612074405680-6.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","file20180612074405680-7.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","file20180612074405680-8.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","file20180612074405680-9.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","file20180612074405680-10.txt",2018-06-12T07:44:05 TZ +01:00
"./dir","20180612074405680_ZTRDEFO_Blackgen.jpg",2018-06-12T07:44:05 TZ +01:00