重命名许多文件的特定部分

重命名许多文件的特定部分

我有一堆文件,名为:

Brooklyn Nine-Nine S01 E01 [H264].mkv
Brooklyn Nine-Nine S01 E02 [H264].mkv
Brooklyn Nine-Nine S01 E03 [H264].mkv
Brooklyn Nine-Nine S01 E04 [H264].mkv
Brooklyn Nine-Nine S01 E05 [H264].mkv
Brooklyn Nine-Nine S01 E06 [H264].mkv
Brooklyn Nine-Nine S01 E07 [H264].mkv
Brooklyn Nine-Nine S01 E08 [H264].mkv
...

我想重命名它们,以便删除 S01 和 E08 之间的空格。例子

Brooklyn Nine-Nine S01E08 [H264].mkv

我已经找到了删除所有空格的命令:

IFS="\n"
for file in *.mkv;
do
    mv "$file" "${file/[[:space:]]}"
done

但我只想删除 Sxx 和 Exx 之间的空格。

答案1

最简单的方法是使用该rename工具,它可以让您在许多文件名中进行简单的搜索和替换:

rename [options] <expression> <replacement> <file>...

像这样的事情应该做:

rename " E0" E0 Brooklyn*.mkv

请注意,如果您使用的是类似 Debian 的发行版,您的rename命令可能会调用具有不同输入语法的 Perl 脚本,而不是util-linux.在这种情况下,请使用rename.ul调用正确的工具。为什么 Debian/Ubuntu 上的重命名实用程序与其他发行版(例如 CentOS)上的重命名实用程序不同?

答案2

for 循环可以编辑如下:

for file in *.mkv;
do
   mv "$file" "${file//S01 E0/S01E0}"
done

或使用rename命令:

rename 's/S01 E0/S01E0/' *.mkv

相关内容