使用Regex查找某些文件类型

时间:2017-11-20 20:24:47

标签: regex linux bash

尝试仅复制jpgpng&从JPG开始的IMG_0000个文件,从一个目录到另一个目录。我找到了正确的表达,但我正在努力使其发挥作用。

到目前为止,我已经放置了正确的Regex以及我的代码。我要复制的目录是/root/memory,目标目录是/root/photoarch。请注意,在/root/memory内,有多个子目录和多种不同的文件类型。

正则表达式:

IMG_[0-9]{4}.[jpg,png,JPG]{3}

代码:

#!bin/bash
mkdir photoarch
find "/root/memory" -regex '.*IMG_[0-9]{4}.[jpg,png,JPG]{3}' -exec cp {} "/root/photoarch"\;

1 个答案:

答案 0 :(得分:3)

如果您尝试复制名为IMG_<4-digits>.<jpg|JPG|png>的文件,那么您的正则表达式及其类型(默认情况下find使用Emacs RE,而不是POSIX ERE)。< / p>

关于正则表达式,您必须使用alternation而不是字符范围。例如,jpg|png将匹配jpgpng。相比之下,[jpg,png]{3}将匹配jpg,n的任意三字符序列,例如{{1} },jjjj,p。此外,您必须转义点(使用pnj),否则它将匹配任何字符。

要使用POSIX ERE,请将\.设置为-regextype(要列出所有已接受的类型,请运行posix-extended)。

对于不区分大小写的匹配,您可以使用find -regextype help

-iregex

find /root/memory -regextype posix-extended -iregex '.*img_[0-9]{4}\.(jpg|png)' -exec cp {} /root/photoarch \; 周围的括号是必要的,因为连接的优先级高于交替。)