我有一系列如下所示的文件:
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的时间来分隔文件(所以应该只返回示例中的第一个和最后一个文件名)。我想我可以使用mv和grep来隔离文件,然后查找它们,但是不应该出现的文件会显示在结果输出中。
我使用的是macOS grep,所以我不确定这是否是问题所在。
我尝试的命令是:
find . -type f -name \*.jpg -exec grep -E '\-1[7-9]|2[0-3]|0[0-5]-\d{2}-\d{2}\.jpg' {} \;我不确定我做错了什么,但如果你有任何建议,那将是很好的。
发布于 2021-03-23 19:00:24
在macOS find上,您可以使用以下命令通过-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发布于 2021-03-23 18:59:53
不是使用-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'然而,编写用于拟合数字范围的正则表达式既累人又容易出错。正如您可能知道的,上面的regex不会检查分钟数。您可能希望切换到awk:
find . -type f -name \*.jpg | awk -F- '$5>=17 || $5<5 || $5==5 && $6<=50'https://stackoverflow.com/questions/66761662
复制相似问题