【问题标题】:Linux Commad Line Zip with Regex带有正则表达式的 Linux 命令行 Zip
【发布时间】:2012-05-17 10:51:03
【问题描述】:

我有数千个 jpg 文件,它们都称为 1.jpg、2.jpg、3.jpg 等等。我需要压缩它们的范围,我想我可以用正则表达式来做到这一点,但到目前为止还没有任何运气。

这里是命令

 zip images.zip '[66895-105515]'.jpg

有人有什么想法吗?

【问题讨论】:

  • 由于正则表达式只匹配字符,所以根据字符匹配数字范围的正则表达式会特别的怪物! (6(6(89[5-9]|9[0-9]{2})|[7-9][0-9]{3})|[7-9][0-9]{4 }|10([0-4][0-9]{3}|5([0-4][0-9]{2}|5(0[0-9]|1[0-5]) ))) 在您的情况下,您的正则表达式所说的是:[ # Match any of the following characters:6689 # Any of these characters5-1 # Or anything in the ascii range of the character '5' to the character '1'05515 # Or any of these characters] 编辑:呃,格式化:(

标签: regex linux command-line zip


【解决方案1】:

我很确定不可能将这样的数字范围与正则表达式匹配(数字范围,是的,但不是整个多位数字),因为正则表达式在字符级别上起作用。但是,您可以使用“seq”命令生成文件列表并使用“xargs”将它们传递给“zip”:

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

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

【讨论】:

  • 最新版本的 OS X 有 seq 工具(刚刚在 10.11 上检查过,另一个 an answer to another question 提到该命令至少早在 OS X 10.8.5 中就可用)。
【解决方案2】:

与 ls 和 bash 范围 ({m..n}) 运算符结合使用,如下所示:

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

【讨论】:

  • 是的,使用 find 它包含所有文件,这就是我编辑答案以包含数字范围内的文件的原因:{66895..105515}
【解决方案3】:

您需要管道一些东西 - 列出文件,按正则表达式过滤,压缩每个列出的文件。

ls | grep [66895-10551] | xargs zip images.zip

编辑:哎呀,没有用多位数字进行测试。正如 denisw 所说,这种方法行不通。

【讨论】:

  • @Ian R.B 我使用了这个命令,它对我来说非常有效。我通过改变我的要求来使用它。 ls | grep eazybi.* | xargs zip eazybi-logs.zip。谢谢
猜你喜欢
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多