重命名:从目录中的文件中删除最后 X 个字符

重命名:从目录中的文件中删除最后 X 个字符

我正在尝试重命名通过 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并延伸到值的末尾。  lengthoffset是算术表达式(参见算术评估[以下])。

    如果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 后)文件名(标签) -高级文件名(标签) -模板(落下)。

在此输入图像描述

相关内容