find -maxdepth 1 -regextype posix-extended -type f -regex "\./${name}[-\.].*\.(gz|bz2|tgz|zip|tar)" -exec basename {} \;
find中使用正则表达式的语法是 find dir -regextype "type" -regex "pattern"
其中
dir:查找文件的起始目录
type: 如果不使用选项 -regextype "type", 则默认的正则表达式类型是emacs(我没用过)。使用该选项的话,type 类型包括 posix-awk, posix-basic, posix-egrep 和 posix-extended 四种。我常用的是后两种。记得PHP也是常用后两种。
pattern: find 中要想使用正规正则表达式,需要用选项 -regex "pattern". (这和常用的grep似乎不一样)。 而pattern就用相应类型风格的正则表达式替换即可。注意 find 的常用选项 -name 是不支持正则表达式的,充其量只能说 -name 选项支持通配符 * ? [] 。
find 正则表达式匹配的是什么
这是经常出问题的地方。至少我该刚接触find 的时候就屡犯这个错误。注意:find 正则表达式是匹配全路径(包含文件名和相对路径),它不是搜索。也就是说所写的正则必须能够匹配整个搜索目录路径和文件名的组合,而不是单单匹配文件名本身。比如说:查找当前目录下的 fubar3 文件。 它的全路径(相对路径)是 ./fubar3 , 注意前面有 ./ 而不只是文件名。所以正则可以写成 `.*bar.' 或者 `.*b.*3' 等等,但是不能写成 `f.*r3' (这里就不能匹配前面的目录部分)