用正则表达式查找目录

时间:2015-08-18 17:06:15

标签: regex bash

我正在尝试查找以'6g'开头的目录,然后是2个字母的状态和4位数字。示例目录是/ home / 6gAL0533 /

通常我会复制到以6g开头的所有目录 “找到6g * -maxdepth 0-type d”  但我现在需要根据他们的4位数字(例如0300 - 0500)将文件复制到特定目录,但我似乎无法让find命令为我工作。我想我需要使用带有单个字符的正则表达式“。”比如“find -type d -regex'6g..0 [3-5] ...'”但是没有结果。我可能错误地使用正则表达式语法,但我没有找到使用正则表达式查找目录的很多信息。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

你根本不需要find,而且你也不需要正则表达式; glob模式非常合适(这意味着你可以与POSIX find兼容,而不需要GNU扩展版本):

shopt -s nullglob
dirs=( /home/6g[A-Za-z][A-Za-z]0[3-5][0-9][0-9][0-9] )
printf '%q\n' "${dirs[@]}" # print results
cp -- "${dirs[@]}" /to/destination # copy results somewhere else

...或...

dirs=( /home/6g??0[3-5]??? ) # use wildcards, as in your proposed regex

...或...

find /home -type d -maxdepth 1 -name '6g??0[3-5]???'

答案 1 :(得分:0)

如果您想使用find正则表达式(Charles Duffy points out,有各种更简单的解决方案),您需要记住-regex查找匹配整个路径名

man find中所述:

-regex pattern
   File  name  matches  regular  expression  pattern.  This is a match
   on the whole path, not a search.  For example, to match a file
   named `./fubar3', you can use the regular expression `.*bar.' or
   `.*b.*3', but not `f.*r3'.  The regular expressions understood by
   find are by default Emacs Regular Expressions, but this can be
   changed with the -regextype option.

因此,您需要:

find -type d -regex '.*/6g..0[3-5]...'