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