regex - 从文件名和路径解析日期和时间

标签 regex bash

如何使用正则表达式从文件路径和名称解析日期和时间?

我有文件存储在这样的文件夹中

/home/user/folder/sub/2017-20-10/001/jpg/14/48/31[M][0@0][0].jpg

基本上,这告诉我该图像是在2017-20-10 14:48:31从相机001拍摄的

我想将此文件复制到一个新位置,名称为从路径+名称解析的日期和时间,因此新文件将是 20172010144831.jpg

最好的方法是什么?我认为正则表达式。这个表达式会是什么样子?

最佳答案

理想情况下,您不必复制正则表达式和迭代模式,但这至少简单且易于理解。

regex=/home/user/folder/sub/(....-..-..)/(.*)/jpg/(..)/(..)/(..).*\.jpg
for f in /home/user/folder/sub/*/*/jpg/*/*/*.jpg; do
  # Match against the regex, or skip to the next file
  [[ $f =~ $regex ]] || continue
  # The first capture group is the date. Strip the -.
  d=${BASH_REMATCH[1]//-}
  # The next three capture groups are the hour, minute, and second
  t=("${BASH_REMATCH[@]:2:3}")
  printf -v new_name '%s%s%s%s.jpg' "$d" "${t[@]}" # Put them all together
done    

关于regex - 从文件名和路径解析日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46848583/

相关文章:

regex - 如何通过 Oracle regexp_replace 中的正则表达式从逗号分隔列表中删除重复项?

javascript - 使用javascript增加字符串中第3次出现的数字

javascript - 在 JS 中使用 RegExp 将任何仅包含空格的 html 标签替换为其空格(数量相同)

python - 检查变量是否为 SRE_Match

linux - Linux 中的终止命令

regex - 如何在匹配正则表达式的多个文件上运行脚本?

python - 一个可以被python和shell读取的配置文件

mysql - puppet :file_line 评估 os.path.join

linux - 在不编写任何代码的情况下,是否有一个命令可以检索当前 shell 的亲和性中可用核心的数量?

python - 脚本语言 : Max. 行长