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”(即文件名的前缀)的目录下,并且在文件名本身上包含此信息将是多余的。
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)
归档时间: |
|
查看次数: |
4494 次 |
最近记录: |