将日期与字符串分开

时间:2017-10-11 10:31:37

标签: linux bash datetime pattern-matching

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

text_text_20171011095937_155.DAT.gz
text_text_20171011095942_156.DAT.gz

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

date -d '20171011095942' +'%R'

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

1 个答案:

答案 0 :(得分:2)

使用查找 + 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}_ - 确保上述序列后跟4个数字,指向<minutes><seconds>

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