批量重命名,*nix 版本

Pao*_* B. 11 unix bsd shell rename

我正在寻找一种方法来重命名大量类似命名的文件,很像这个(一个与 Windows 相关的问题),只是我使用的是 *nix(分别是 Ubuntu 和 FreeBSD)。总结一下,在使用 shell(Bash、CSH 等)时,我如何批量重命名一些文件,例如,以下文件:

贝多芬 - Fur Elise.mp3
贝多芬 - 月光奏鸣曲.mp3
贝多芬 - 欢乐颂.mp3
贝多芬 - 对失去的一分钱的愤怒.mp3

会像这样重命名吗?

Fur Elise.mp3
月光奏鸣曲.mp3
欢乐颂.mp3
失落的一分钱的愤怒.mp3

我想这样做的原因是这些文件集合将位于名为“Beethoven”(即文件名的前缀)的目录下,并且在文件名本身上包含此信息将是多余的。

小智 12

重命名实用程序将执行您想要的操作。

只需使用 rename 's/Beethoven\ -\ //g' *.mp3


jti*_*man 10

就像 Linux/Unix 的许多事情一样,有不止一种方法可以做到!

有些人可能会使用mmv(质量 mv)。

某些 Perl 软件包(较新的 Ubuntu 和 Debian)随附的 rename 或 prename 命令也可以执行此操作。

prename 's/Beethoven\ -\ //g' Beethoven*.mp3
Run Code Online (Sandbox Code Playgroud)

请注意,Fedora 10 上的重命名工具与此程序不同,并且工作方式不同。它是另一个包 util-linux-ng 的一部分,可以在此处找到。

我经常出于习惯而去 shell for 循环(毕竟这样的工具并不总是存在)。

mkdir -p Beethoven
for x in Beethoven\ -\ *
do
mv "$x" Beethoven/"${x/Beethoven - /}"
done
Run Code Online (Sandbox Code Playgroud)

这将创建 Beethoven 目录,然后将文件移动到该目录/文件名,其中文件名将“Beethoven -”替换为空。

作为测试,之前:

$ ls
Beethoven - Fur Elise.mp3                 Beethoven - Ode to Joy.mp3
Beethoven - Moonlight Sonata.mp3          Beethoven - Rage Over the Lost Penny.mp3
Run Code Online (Sandbox Code Playgroud)

后:

$ ls Beethoven/
Fur Elise.mp3                 Ode to Joy.mp3
Moonlight Sonata.mp3          Rage Over the Lost Penny.mp3
Run Code Online (Sandbox Code Playgroud)