我正在尝试重命名通过 youtube-dl 从各种来源下载的大量视频。您可能知道,yt-dl 会将视图代码附加到文件名中。
例如
视频标题-dQw4w9WgXcQ.mp4
我正在寻找一个程序或 CLI 命令来从文件名中删除最后 X 个字符。在示例中,该数字为 12 个字符(不包括文件扩展名 .mp4)
我尝试过搜索这样的命令,但没有找到任何有效的。也尝试过KReename,但找不到“删除从最后一个字符开始的X个字符”的等效项,我记得我曾经使用过的一个Windows程序有这个功能。
是否有任何“简单”命令可以用来执行此操作?或者是一个程序,或者 KRename 中的某些设置。尝试了 PyRename,但也没有运气。
答案1
和prename
(珀尔重命名)命令:
prename 's/(.*).{12}(\.mp4)/$1$2/' *.mp4
答案2
和zsh
:
autoload zmv # best in ~/.zshrc
zmv -n '(*)?(#c12).mp4' '$1.mp4'
(高兴时删除-n
(空运行))。
答案3
考虑这个问题的一种方法是您想要删除最后 16 个字符(包括扩展名),因此您可以使用巴什 参数扩展去做这个:
${parameter:offset:length}
子串扩展。扩展到最多
length
的值的字符parameter
从指定的字符开始offset
。如果parameter
是@
,下标为的索引数组@
或者*
或关联数组名称,结果会有所不同,如下所述。如果length
被省略,扩展为值的子字符串parameter
从指定的字符开始offset
并延伸到值的末尾。length
和offset
是算术表达式(参见算术评估[以下])。如果
offset
计算结果为小于零的数字,该值用作从值末尾开始的字符偏移量parameter
。如果length
计算结果为小于零的数字,它被解释为距值末尾的字符偏移量parameter
而不是多个字符,并且扩展是之间的字符offset
以及那个结果。请注意,负偏移量必须与冒号分隔至少一个空格,以避免与冒号相混淆。:-
扩张。
考虑到负数在冒号后需要一个空格的部分,您可以这样做:
#!/bin/bash
for f in *.mp4; do
mv -- "$f" "${f:0: -16}.mp4"
done
exit
您可能想通过首先执行 来测试这一点,然后在试运行产生可接受的结果时echo mv -- "$f" "${f:0: -16}.mp4"
取出。 echo
(注意对负面的支持length
是一个 相对地Bash 最近添加的内容; YMMV。)
请注意,如果有A Star is Born-dQw4w9WgXcQ.mp4
和 A Star is Born-foobar42quuxBAZ.mp4
,那么它们都将被重命名为A Star is Born.mp4
(即,将会发生“碰撞”)。如果您运行的是mv
原始文件,那么当第二个文件被重命名时,第一个文件将被破坏。您可能想使用它mv -i
来防止这种情况。
答案4
Thunar 批量重命名工具 ( thunar -B
)。
KRename 无法执行此操作。 Thunar 重命名器有一种不完整的分支,专为 KDE 制作,但可以单独使用,称为“仿生批量重命名器")。它缺少一些基本选项(记住设置、重新排列列表中的项目)。
Thunar 重命名器存在这个问题,它与 Thunar 文件管理器和其他 xfce 工具一起提供。 Thunar 可能会干扰 Plasma KDE 上的默认文件管理器:我使用这个解决方案。
作为补充答案[1-[#length-12]]
Krename 中的选项中的一个:
该选项实际上位于 文件名(标签) -简单文件名(标签) -文件名(落下):自定义名称。
请注意,最后使用的选项会被记住(在重新启动 krename 后)文件名(标签) -高级文件名(标签) -模板(落下)。