Linux命令行中使用正则表达式压缩文件

4
我有成千上万个jpg文件,它们都被称为1.jpg、2.jpg、3.jpg等等。我需要将其中一些文件压缩成一个zip文件,我曾尝试使用正则表达式来完成这一操作,但迄今为止并没有成功。
以下是命令:
 zip images.zip '[66895-105515]'.jpg

有人有什么想法吗?


1
由于常规表达式只匹配字符,基于字符的数字范围匹配正则表达式将会特别庞大!在你的情况下,你的正则表达式所描述的是: [ # 匹配以下任意一个字符: 6689 # 任意一个这些字符 5-1 # 或者ASCII字符'5'到字符'1'之间的任何字符 05515 # 或者任意一个这些字符 ] - Jarmex
3个回答

6

可以和ls及bash中的区间运算符({m..n})一起使用,如下所示:

ls {66895..105515}".jpg" 2>/dev/null | zip jpegs -@

是的,使用find命令会包含所有文件,这就是为什么我编辑了我的答案,将文件包括在数字范围内:{66895..105515} - anubhava
1
这是一个非常棒的东西! - independentvariable

6

我非常确定使用正则表达式无法匹配这样的数字范围(可以匹配数字范围,但不能匹配整个多位数字),因为正则表达式是基于字符级别工作的。但是,您可以使用“seq”命令生成文件列表,并使用“xargs”将其传递给“zip”:

seq --format %g.jpg 66895 105515 | xargs zip images.zip

我在Linux下测试了一堆虚拟文件,命令运行良好。


最近的OS X版本有seq工具(在10.11上进行了检查,另一个问题的答案提到该命令至少在OS X 10.8.5中可用)。 - Denis Washington

4
您需要管道一些东西——列出文件,按正则表达式过滤,压缩每个列出的文件。
ls | grep [66895-10551] | xargs zip images.zip

编辑:抱歉,没有测试多位数字。如denisw所提到的,这种方法不起作用。


@Ian R.B 我使用了这个命令,它对我来说完美地工作了。我根据我的要求进行了更改。ls | grep eazybi.* | xargs zip eazybi-logs.zip。谢谢 - Akhil Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接