Answers:
这是在Bash中执行此操作的一种方法:
for i in *; do [ "${i/%MP3/mp3}" != "$i" ] && echo "$i" "${i/%MP3/mp3}"; done
我在echo
这里使用过,因此命令本身除了打印文件名对外,什么也不做。如果该列表表示您要进行的更改,则可以更改echo
为mv -i --
,然后将移动文件(并在覆盖之前提示您)。
在for
通过每一个文件迭代匹配的*
。然后,我们确定扩展名是否已经是小写字母了,如果继续,则继续,如果不是,则继续进行扩展(或视情况而定)。这使用了Bash的内置字符串操作,您可以在此处阅读:http : //tldp.org/LDP/abs/html/string-manipulation.html
在zsh中:
autoload zmv
zmv '(*).MP3' '$1.mp3' # rename files in the current directory only
zmv '(**/)(*).MP3' '$1$2.mp3' # rename files in subdirectories as well
要同时照顾.Mp3
或.mP3
归档:
zmv '(**/)(*).(#i)mp3' '$1$2.mp3'
您可以使用重命名命令(请注意,有两个具有不同API的主要实现)。例如,要将文件扩展名的大小写从上到下更改,请尝试以下操作:
with rename
from util-linux
(有时称为rename.ul
),假设.JPG
在文件名中仅发生一次
rename -- .JPG .jpg *.JPG
与rename
from perl
(有时称为prename
;已经发布了多个变体):
rename 's/\.JPG$/.jpg/' ./*.JPG
这是一些有关他如何从一个混乱的bash脚本转移到这个简单命令的教程,完全适合您的用例。
另一个执行此操作的命令是pax
。如果您在外壳上使用ZSH,也可以使用zmv
。
syntax error at (user-supplied code), near "."
运行此命令时出现错误。
使用perl-rename,瑞士军刀对文件进行正则表达式重命名(在ubuntu上,这与perl软件包捆绑在一起作为别名):
# Replace prename as appropriate (i.e. if you've got it installed under a different name
find /RootPath -type f -iname '*.mp3' -print0 | xargs -0 prename 's/mp3$/mp3/i'
如果您选择的很仔细,请使用-n和-v选项对perl重命名以查看其实际作用。
您需要一个脚本,因为Linux下的“扩展名”实际上只是文件名字符串的一部分。您必须在脚本中进行一些字符串操作才能获得新名称。
#!/bin/bash
for NAME in *.JPG
do
PREFIX=${NAME%.*}
NEWNAME="$PREFIX.jpg"
mv "$NAME" "$NEWNAME"
done
如果文件名中带有空格,则双引号很重要。我认为某些双引号不太明显。
首先备份您的文件!您可以使用python一线式:
python -c "import glob,os; [os.rename(fn, fn.replace('.MP3', '.mp3')) for fn in glob.glob('PATH_TO_YOUR_DIRECTORY')]"
编辑:
这是单线纸实际工作方式的详细说明。使用python -c
我们将命令传递给python解释器。在os
为rename
函数和glob
文件列表导入库之后,我们需要遍历给定目录中的文件列表,我称之为PATH_TO_YOUR_DIRECTORY
,例如./*
对于当前目录中的所有内容。
不幸的是,在单线语法中,for
循环在import
表示法之后不起作用,因此我们需要使用方括号表示法。即,对于glob
从给定路径以字符串形式给我们的每个文件或目录名称,我们将* .MP3替换为* .mp3。
由于OP没有提及递归搜索,因此我没有首先将其包括在内。