我有大量 .json 文件需要重命名为每个文件名称中的特定数字字符串。它们遵循以下格式:
[Artist] Title (Date) [Language][Publisher][Website.####][Pages].json
“####”代表一个唯一的数字 ID,我需要将每个文件重命名为该 ID,长度范围为 1-4 个字符。它应该看起来像这样:
####.json
我怎样才能实现这个目标?
答案1
和zsh
:
autoload -Uz zmv
zmv -n '*\[*.(<->)\]\[*(.json)' '$1$2'
如果满意,请删除-n
(试运行)。
ablezmv
autoload
函数有两个参数:
- zsh 扩展的 glob 模式
- 更换规格
它找到与模式匹配的文件,这里是当前目录中按顺序包含的所有非隐藏文件:
*
任意数量的字符(或字节)\[
字面意思[
*
任意数量的字符(或字节).
字面意思.
<->
任何 ASCII 十进制数字序列(<x-y>
匹配表示从 x 到 y 的数字的 ASCII 十进制数字序列)\]\[
:][
字面上地。*
任意数量的字符(或字节).json
: 字面上地。
在替换中,$1
扩展为第一对 中匹配的内容,因此和与第二对 ( )(...)
相匹配。<->
$2
.json
请注意,当这些匹配贪婪时,它将在最右边的一对内容中找到以(不包括最后一个)结尾*
的数字。例如,在 中,即使它不在 s 的倒数第二对中,它也会提取。[...]
.<digits>
[a.1][a.2.3][x][y][z].json
3
[...]
如果这是一个问题,你可以将其更改为:
zmv -n '*.(<->)\]\[[^][]#\](.json)' '$1$2'
其中匹配除和[^][]#
之外的 0 个或多个字符(或非字符)。[
]