【问题标题】:Separating the time from a date from a string从字符串中分离时间和日期
【发布时间】:2017-10-11 10:31:37
【问题描述】:

我有一些文件的名称中包含以下字符串:“20171011095942”,即日期和时间“2017/10/11 09:59:42”。

text_text_20171011095937_155.DAT.gz
text_text_20171011095942_156.DAT.gz

我需要选择从 09 小时开始的所有文件并将它们放在另一个文件夹中。如果我使用命令:

date -d '20171011095942' +'%R'

上面写着“无效日期”。如何将时间与该字符串分开,以便我只能选择那些文件? 谢谢!

【问题讨论】:

  • 文件名格式是否固定? text_text_20171011095942_156.DAT.gz?你能给我们一些实际的例子吗?即日期部分是否在第二个 _ 之后开始?
  • 是的,名称格式是固定的。文件名称的唯一区别是数字序列,因为它们指向另一个时间和日期,以及定义文件编号 (155,156) 的数字。日期部分总是在第二个“_”之后开始

标签: linux bash datetime pattern-matching


【解决方案1】:

使用 find + mv 命令:

find . -type f -regextype posix-egrep -regex ".*_2017101109[0-9]{4}_.*\.gz" -exec mv {} dest_dir/ \;

在上述命令中将dest_dir 更改为您的“另一个文件夹”

.*_2017101109[0-9]{4}_.*\.gz - 正则表达式模式匹配包含所需序列的所有文件名。

  • .* - 匹配任何字符

  • _2017101109 - 匹配关键数字序列 (<year><month><day><hours>)

  • [0-9]{4}_ - 确保上面提到的序列如果后面跟着指向<minutes><seconds>的4位数字

  • \.gz - 确保文件扩展名为.gz

【讨论】:

  • 这太好了,谢谢!只是一个小问题。我了解此命令在当前目录中搜索文件。您使用了“-regextype posix-egrep”,因此您可以使用扩展的正则表达式,但我并不真正理解您在正则表达式中使用的正则表达式。你能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多