我在此目录中有多个文件someDir
,并且我尝试仅移动具有此结尾的文件O_010_0000000028181996.xml
我已经在线检查了我的正则表达式并且它匹配,问题是当我运行 bash 命令时,文件不会移动到文件夹中found
。
我的命令 bash 命令是
find /home/someDir/ -regex '\d{10}.{3}O_010_0000000028181996\.xml' -exec mv '{}' /home/found/ \;
目录 someDir 中的文件名示例:
0208420319-1-O_010_0000000028174248.xml
0208461630-1-O_010_0000000028178356.xml
0208696934-1-O_010_0000000028181996.xml
0208696935-1-O_010_0000000028181996.xml
0208735127-1-O_010_0000000028186468.xml
0208774443-1-O_010_0000000028191308.xml
0208812611-1-O_010_0000000028196104.xml
0208858156-1-O_010_0000000028198984.xml
答案1
至少在 GNU 中find
,你可以看到它支持哪些正则表达式
$ find -regextype help
find: Unknown regular expression type ‘help’; valid types are ‘findutils-default’, ‘ed’, ‘emacs’, ‘gnu-awk’, ‘grep’, ‘posix-awk’, ‘awk’, ‘posix-basic’, ‘posix-egrep’, ‘egrep’, ‘posix-extended’, ‘posix-minimal-basic’, ‘sed’.
\d
AFAIK 这些都不支持十进制数字的PCRE 。此外,未给出findutils-default
显式说明时应用的类型仅支持、和作为量词。-regextype
*
+
?
您可能会得到的最接近的结果是替换\d
为[0-9]
or[[:digit:]]
并使用-regextype egrep
or -regextype posix-extended
ex。
find . -regextype posix-extended -regex '.*/[0-9]{10}.{3}O_010_0000000028181996\.xml'
也可以看看