我有一系列文件,如下所示:
image-seq 2020-04-13-05-50-00.jpg
image-seq 2020-04-13-06-00-00.jpg
...
image-seq 2020-04-13-16-50-00.jpg
image-seq 2020-04-13-17-00-00.jpg
我试图将时间从17:00到第二天05:50的文件分开(因此只应返回示例中的第一个和最后一个文件名(。我想我可以使用find和grep来隔离文件,然后mv
它们,但不应该出现的文件会显示在结果输出中。
我正在使用macOS grep,所以我不确定这是否是问题所在。
我尝试的命令是:
find . -type f -name *.jpg -exec grep -E '-1[7-9]|2[0-3]|0[0-5]-d{2}-d{2}.jpg' {} ;
我不确定我做错了什么,但如果你有什么建议,那就太好了。
在macOSfind
上,您可以使用此命令使用-E
和-iregex
选项获取匹配的文件:
find -E . -iregex '.*(-1[7-9]|2[0-3]|0[0-5])(-[0-9]{2}){2}.jpg'
./image-seq 2020-04-13-05-50-00.jpg
./image-seq 2020-04-13-17-00-00.jpg
不使用-exec grep
在文件内部搜索,而是使用管道find | grep
在find
打印的文件名列表内部搜索。
然后,您还必须调整正则表达式。使用-a|b|c-
搜索-a
、b
或c-
。您可能指的是搜索-a-
、-b-
或-c-
的-(a|b|c)-
。
find . -type f -name *.jpg | grep -E -e'-(1[7-9]|2[0-3]|0[0-5])-..-...jpg'
然而,为fitlering数字范围编写正则表达式是很累的,而且容易出错。正如您可能知道的,上面的regex不会检查分钟数。您可能需要切换到awk
:
find . -type f -name *.jpg | awk -F- '$5>=17 || $5<5 || $5==5 && $6<=50'