Предположение :Вы не хотите выполнять преобразование между часовыми поясами, просто проанализируйте метку времени в имени файла как строку. Кроме того, три последние цифры не имеют значения и могут быть отброшены.
Использование find
, вызов скрипта 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
Команда find
передает каждый файл, найденный в текущем каталоге (.
), короткому скрипту bash
. Если вы хотите найти определенный суффикс имени файла, добавьте, например. -name '*.jpg'
до -exec
.
Скрипт bash
с аннотациями:
# 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
При выводе ${pathname%/*}
— каталог найденного файла (можно записать $( dirname "$pathname" )
), ${pathname##*/}
— имя найденного файла (можно записать$( basename "$pathname" )
)и ${BASH_REMATCH[@]:1}
каждая отдельная часть будет захвачена регулярным выражением.
Вывод всей команды записывается в report.csv
с использованием перенаправления в конце команды find
.
Пример:
.
`-- 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
Запуск команды генерирует report.csv
, который выглядит как
"./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