Вы можете использовать cut
для извлечения части после интересующей вас открывающей скобки и завершить с помощью sed для удаления части после скобки обработки.
cut -d '[' -f 3 | sed 's/].*//'
Кроме того, вы можете сделать это с помощью одной команды sed или awk.
sed 's/^[^[]*\[\([^\]\)]*\][^[]*\[\([^\]\)]*\][^[]*\[\([^\]\)]*\].*$/\3/'
gawk -F '(^|\\])[^[]*(\\[|$)' '{print $4}'
awk '{split($0, a, "(^|\\])[^[]*(\\[|$)"); print a[4]}'
В обеих командах awk поле 1 пусто, поскольку первый разделитель начинается в начале строки, поэтому третья группа в квадратных скобках — это поле 4.
Это использует ffmpeg(sudo apt install ffmpeg
для установки )и работает с вашими точными именами файлов. Он заменяет ваши старые файлы новыми с набором метаданных. Может сначала попробовать БЕЗ части && mv "~$f" "$f"
:
$ for f in *.mp4; do ffmpeg -i "$f" -metadata creation_time="${f:0:4}-${f:4:2}-${f:6:2} ${f:9:2}:${f:11:2}:${f:13:2}" -codec copy "~$f" && mv "~$f" "$f"; done
Проверить метаданные с помощью:
$ ffprobe -v quiet 20190228_155905.mp4 -print_format json -show_entries stream=index,codec_type:stream_tags=creation_time:format_tags=creation_time
Другой вариант — использоватьexiftool
В этом примере сначала запустите touch
, чтобы установить время модификации файла, затем:
exiftool '-CreateDate<FileModifyDate' \
'-TrackCreateDate<FileModifyDate' \
'-MediaCreateDate<FileModifyDate' \
filename.mp4