使用rename
...
rename -n 's/^([0-9]+\.[0-9]\.[0-9]+\.[0-9]+_[0-9]+_)([0-9]+)_([0-9]+)_([0-9]+)\.jpg/$1$2$3$4_TIMING\.jpg/' *
使用-n
参数,这将输出它将要执行的操作,而不会进行任何更改。
rename(10.3.100.179_01_20161018_230014_5335.jpg, 10.3.100.179_01_201610182300145335_TIMING.jpg)
rename(10.3.100.179_01_20161018_231514_0814.jpg, 10.3.100.179_01_201610182315140814_TIMING.jpg)
rename(10.3.100.179_01_20161018_233014_5706.jpg, 10.3.100.179_01_201610182330145706_TIMING.jpg)
rename(10.3.100.179_01_20161018_234514_0896.jpg, 10.3.100.179_01_201610182345140896_TIMING.jpg)
如果看起来没问题,就把 -n
删掉。
$ rename 's/^([0-9]+\.[0-9]\.[0-9]+\.[0-9]+_[0-9]+_)([0-9]+)_([0-9]+)_([0-9]+)\.jpg/$1$2$3$4_TIMING\.jpg/' *
$ ls
10.3.100.179_01_201610182300145335_TIMING.jpg 10.3.100.179_01_201610182330145706_TIMING.jpg
10.3.100.179_01_201610182315140814_TIMING.jpg 10.3.100.179_01_201610182345140896_TIMING.jpg
解释...
- `s/something/something_else/` 搜索和替换
- `^` 名称的开头(锚定)
- `[0-9]` 任意数字
- `+` 前一个字符的一个或多个
- `\.` 字面上的 `. `(没有 `\`,这将匹配任何字符)
- `()` 保留此部分
- `$1$2$3$3` 回引先前匹配并保留的内容
注意:命令末尾的 `*` 匹配当前目录中的所有可见文件。如有需要,请使用更合适的通配符。
10.3.100.179
替换为10.4.100.135
。这是你想要的吗,还是你只想删除时间中的_TIMING
和_
? - terdon10.4.100.135_01_2016-10-13T13:11:08.389_TIMING.jpg
(甚至可以删除"TIMING",因为现在它看起来明显像是一个日期和时间(以及毫秒),特别是当这个标准变得更加普遍时。T是标准的一部分,我习惯了它(去掉它会破坏标准^^)。 - Olivier Dulac:
。我相信Windows不支持它。 - Justin