0

我在名为 OIS001_OD_EYE_MIC.png - OIS176_OD_EYE_MIC.png 的目录中有一个文件

如此正则表达式所示,提取数字 1-99 很容易。我想要 1-88 将目录分成两半。

为什么?所以我可以有两套偶数的文件来压缩

ls | sed  -n '/^[A-Z]*0[0-9][0-9].*EYE_MIC.png/p'

这是我获得 0-99 的尝试。你能帮我弄到 1-88 或者 89-176 吗?

4

4 回答 4

5

您可以使用范围:{start..end}像这样:

echo OIS00{0..88}_OD_EYE_MIC.png

将扩大到

OIS000_OD_EYE_MIC.png OIS001_OD_EYE_MIC.png [...] OIS0087_OD_EYE_MIC.png OIS0088_OD_EYE_MIC.png

在 bash 的手册页中查找Brace 扩展

于 2012-10-02T07:08:05.790 回答
4

有了一个足够新的 bash:

ls OIS0{01..88}_OD_EYE_MIC.png
于 2012-10-02T07:06:22.743 回答
1

这是一个管道并行替代方案:

ls -v | columns --by-columns -c2 | tr -s ' '   \
| tee >(cut -d' ' -f1 | tar cf part1.tar -T -) \
      >(cut -d' ' -f2 | tar cf part2.tar -T -) > /dev/null

如果文件的名称中有空格,则此方法需要更多工作。

这个想法是将文件列表列成列并用于tee将其多路复用到单独的压缩过程中。

columns程序随autogen软件包一起提供(至少在 Debian 中)。

于 2012-10-02T09:49:40.967 回答
1

使用正则表达式,您必须考虑某些数字范围的字符串的外观(您不能直接匹配特定的数字范围)。1-88:

/^[A-Z]*(00[1-9]|0[1-7][0-9]|08[0-8]).*EYE_MIC.png/

对于 88 - 176:

/^[A-Z]*(089|09[0-9]|1[0-6][0-9]|17[0-6]).*EYE_MIC.png/

这里还有一些例子。

于 2012-10-02T06:59:09.940 回答