我在电脑上下载了这部火影忍者动漫。它们的名字如下
NARUTO 50 — The Fifth Gate- A Splendid Ninja is Born_low.mp4
我只是想将它们批量重命名为类似这样的名称Naruto_50
。
有没有简单的方法可以做到这一点?我习惯使用终端。
答案1
如果您想继续使用 shell,有一个简单但繁琐的方法。您可以利用 的bash
参数扩展。
字符串长度修改:
${PARAMETER:OFFSET}
:从 OFFSET 位置展开。${PARAMETER:OFFSET:LENGTH}
:从位置 OFFSET 扩展到最终 LENGTH。例如:
$ test="This is a long string" $ echo $test This is a long string. $ echo ${test:0:4} This
案例修改:
${PARAMETER^}
:第一个字符大写。${PARAMETER^^}
:全部大写。${PARAMETER,}
:第一个小写字母。${PARAMETER,,}
:全部小写。$ test="This Is A Long String" $ echo ${test,} this Is A Long String. $ echo ${test,,} this is a long string.
子串删除:
${PARAMETER#PATTERN}
:bash
从字符串开头删除一个模式,如您所见。尝试找到最短的匹配。${PARAMETER##PATTERN}
:相同,但是最长匹配。${PARAMETER%PATTERN}, ${PARAMETER%%PATTERN}
:从字符串的结尾开始。例如:
$ test="This is a long, long string." $ echo ${test#*long} , long string. $ echo ${test##*long} string. $ echo ${test%long*} This is a long,
搜索和替换:
${PARAMETER/PATTERN/STRING}
:将第一次出现的 PATTERN 替换为 STRING。${PARAMETER//PATTERN/STRING}
:替换所有出现的项。${PARAMETER/PATTERN}
:删除第一次出现的。${PARAMETER//PATTERN}
: 移除所有。$ test="This is a long, long string." $ echo ${test/long/big} This is a big, long string. $ echo ${test//long/big} This is a big, big string. $ echo ${test//long} This is a , string.
因此,您可以制作一个简单的for
循环并逐步进行更改。例如:
#!/bin/bash
for i in *; do
ext="${i##*.}" # get extension
name="${i%% --*}" # get original name
lname="${name,,}" # lowercase
nsname="${lname// /_}" # all spaces to underscore
mv "$i" "$nsname.$ext"
done
答案2
来自默认 Ubuntu 存储库的 pyRenamer 是一个图形重命名器应用程序,支持使用模式重命名文件,包括 pyRenamer 内置的模式表达式。将鼠标移到原始文件名模式和重命名文件名模式字段以显示该字段可用的模式表达式列表。单击预览按钮预览更改,然后再应用。点击改名按钮重命名文件。这是批量重命名一系列视频文件的最简单方法。
pyRenamer 可从 Ubuntu 16.04 及更早版本的默认 Ubuntu 存储库中获得。在 Ubuntu 18.04 及更高版本中,pyRenamer 已被替换为GP重命名或智能文件重命名器 snap 包 ( sudo snap install smart-file-renamer
)。
举个例子,你需要匹配系列中视频的编号和.mp4
文件名末尾的扩展名,然后替换为Naruto_
在文件名开头替换为重命名文件名模式场地。
答案3
你也可以使用基于 perl 的rename
命令:类似
rename -- 's/(\w+)\s+(\w+).*/$1_$2.mp4/' *.mp4
它采用前两个“单词”(单词字符序列,由空格分隔),丢弃名称的其余部分,然后输出由下划线分隔的单词,后跟.mp4
点扩展名。
如果您想要按照问题所示对第一个单词进行标题大小写处理,则可以使用\u
和\L
修饰符
rename -- 's/(\w+)\s+(\w+).*/\u\L$1_$2.mp4/' *.mp4
使用-n
(no-op) 和-v
(verbose) 开关和示例文件名进行测试
$ rename -nv -- 's/(\w+)\s+(\w+).*/\u\L$1_$2.mp4/' *.mp4
NARUTO 50 — The Fifth Gate- A Splendid Ninja is Born_low.mp4 renamed as Naruto_50.mp4
你可以做得更好 - 例如让它更普遍地处理点后缀,而不是假设它们都是.mp4
- 你可能会发现正则表达式教程有用。