Linux 将时间、日期和字符串分开
我有一些文件的名称中包含以下字符串:“20171011095942”,即日期和时间“2017/10/11 09:59:42” 我需要选择在09点开始的所有文件,并将它们放在另一个文件夹中。如果我使用命令:Linux 将时间、日期和字符串分开,linux,bash,datetime,pattern-matching,Linux,Bash,Datetime,Pattern Matching,我有一些文件的名称中包含以下字符串:“20171011095942”,即日期和时间“2017/10/11 09:59:42” 我需要选择在09点开始的所有文件,并将它们放在另一个文件夹中。如果我使用命令: date -d '20171011095942' +'%R' 上面写着“无效日期”。如何将时间与该字符串分开,以便仅选择这些文件? 谢谢大家! 使用find+mv命令: find . -type f -regextype posix-egrep -regex ".*_2017101109[0
date -d '20171011095942' +'%R'
上面写着“无效日期”。如何将时间与该字符串分开,以便仅选择这些文件?
谢谢大家! 使用find+mv命令:
find . -type f -regextype posix-egrep -regex ".*_2017101109[0-9]{4}_.*\.gz" -exec mv {} dest_dir/ \;
在上述命令中,将
dest_dir
更改为您的“另一个文件夹”
*\u 2017101109[0-9]{4}.*\.gz
-regex模式匹配包含所需序列的所有文件名
-匹配任何字符*
-匹配关键数字序列(\u 2017101109
)
-确保上述序列后面有4个指向[0-9]{4}
-确保文件扩展名为\.gz
.gz
之后开始?是的,名称格式是固定的。文件名的唯一区别是数字序列,因为它们指向另一个时间和日期,以及定义文件号的数字(155156)。日期部分总是在第二个“u”之后开始这太好了,谢谢!只是一个小问题。我知道这个命令在当前目录中搜索文件。您使用了“-regextype posix egrep”,因此可以使用扩展正则表达式,但我不太理解您在正则表达式中使用的正则表达式。你能解释一下吗?
find . -type f -regextype posix-egrep -regex ".*_2017101109[0-9]{4}_.*\.gz" -exec mv {} dest_dir/ \;