基于正则表达式的 gzip 文件
gzip files based on regular expression
如果文件名与正则表达式匹配,我想对目录中的所有文件进行 gzip 压缩。有什么方法可以做类似的事情:
gzip \b[^2\W]{2,}\b
现在,当我这样做时,它会给我一个错误,因为它不知道我要匹配正则表达式。
find -maxdepth 1 -regex '.*\b[^2[^_[:alnum:]]]{2,}\b.*' -exec gzip {} +
-maxdepth 1
阻止 find
遍历子目录,否则这是它的默认行为和主要目的。
-regex
参数需要匹配整个文件名,所以我在两边都添加了.*
。
不清楚 shell 你问的是哪个。 Bash 有 extended glob patterns 但是仍然不是正则表达式。对于正确的正则表达式,您需要尝试遍历文件:
pat='\b[^_[:alnum:]]{2,}\b'
for file in ./*; do
if [[ "$file" =~ $pat ]]; then
gzip "$file"
fi
done
Bash 不支持与 Perl 兼容的 \W
(无论如何包括 2
)所以我切换到 POSIX 字符 class [^_[:alnum:]]
这基本上是等价的。或许还可以参见 Bash Regular Expression -- Can't seem to match any of \s \S \d \D \w \W etc
在一般情况下,您始终可以使用单独的正则表达式工具。
printf '%s[=11=]' ./* |
perl -0lne 'print if /\b[^2\W]{2,}\b/' |
xargs -0 gzip
[=15=]
字节的恶作剧是为了稳健地支持任意文件名(想想文件名中有换行符等);另见 http://mywiki.wooledge.org/BashFAQ/020
如果文件名与正则表达式匹配,我想对目录中的所有文件进行 gzip 压缩。有什么方法可以做类似的事情:
gzip \b[^2\W]{2,}\b
现在,当我这样做时,它会给我一个错误,因为它不知道我要匹配正则表达式。
find -maxdepth 1 -regex '.*\b[^2[^_[:alnum:]]]{2,}\b.*' -exec gzip {} +
-maxdepth 1
阻止 find
遍历子目录,否则这是它的默认行为和主要目的。
-regex
参数需要匹配整个文件名,所以我在两边都添加了.*
。
不清楚 shell 你问的是哪个。 Bash 有 extended glob patterns 但是仍然不是正则表达式。对于正确的正则表达式,您需要尝试遍历文件:
pat='\b[^_[:alnum:]]{2,}\b'
for file in ./*; do
if [[ "$file" =~ $pat ]]; then
gzip "$file"
fi
done
Bash 不支持与 Perl 兼容的 \W
(无论如何包括 2
)所以我切换到 POSIX 字符 class [^_[:alnum:]]
这基本上是等价的。或许还可以参见 Bash Regular Expression -- Can't seem to match any of \s \S \d \D \w \W etc
在一般情况下,您始终可以使用单独的正则表达式工具。
printf '%s[=11=]' ./* |
perl -0lne 'print if /\b[^2\W]{2,}\b/' |
xargs -0 gzip
[=15=]
字节的恶作剧是为了稳健地支持任意文件名(想想文件名中有换行符等);另见 http://mywiki.wooledge.org/BashFAQ/020