如何通过正则表达式匹配文件名批量对目录下文件执行gzip压缩
gzip 本身仅支持传入文件路径作为参数,不支持直接识别正则表达式做文件名匹配,你可以配合 find 工具实现需求,具体方法如下:
方法1:使用find命令(支持全功能正则匹配,可自由控制是否递归子目录)
find 内置正则匹配能力,还能直接调用gzip批量处理匹配到的文件,适配你给出的正则\b[^2\W]{2,}\b的示例命令如下:
find . -maxdepth 1 -type f -regextype posix-extended -regex '.*/\b[^2\W]{2,}\b' -exec gzip {} +
参数说明:
-maxdepth 1:仅查找当前目录,不递归遍历子目录,如有递归需求删除该参数即可-type f:仅匹配普通文件,避免误处理目录、软链接等特殊文件-regextype posix-extended:指定使用扩展正则语法,和通用正则规则兼容性更好-regex '.*/\b[^2\W]{2,}\b':正则匹配规则,前缀.*/是为了匹配find返回的完整文件路径,再叠加你需要的文件名匹配规则-exec gzip {} +:将所有匹配到的文件批量传递给gzip执行压缩,执行效率更高
方法2:简单匹配场景可使用shell glob
如果你的匹配规则比较简单,不需要用到单词边界等复杂正则语法,也可以开启shell的extglob选项后用通配符匹配:
# 先开启extglob选项 shopt -s extglob # 示例:压缩所有文件名不含2的文件 gzip !(*2*)
注意:建议先执行如下命令打印匹配到的文件,确认符合预期后再执行压缩操作,避免误处理:
find . -maxdepth 1 -type f -regextype posix-extended -regex '.*/\b[^2\W]{2,}\b' -print
内容的提问来源于stack exchange,提问作者Nathan Dai
相关产品推荐
相关产品推荐

