在终端中,我尝试重命名文件夹中文件名末尾包含空格和数字组合的所有文件。文件名的末尾包含空格和数字的组合(例如“12334”),我需要删除 .mp3 之前的任何数字和空格。
例如:
filename 1234567.mp3
my file 123.mp3
your file 98.mp3
更名为:
filename.mp3
my file.mp3
your file.mp3
答案1
巴什
$ touch 'filename 1234567.mp3' 'my file 123.mp3' 'your file 98.mp3' 1234.mp3 zzz.mp3
$ for f in *.mp3; do
g=${f%%[[:space:]]+([[:digit:]]).mp3}
if [[ $f != $g ]]; then
mv -v -- "$f" "$g.mp3"
fi
done
renamed 'filename 1234567.mp3' -> 'filename.mp3'
renamed 'my file 123.mp3' -> 'my file.mp3'
renamed 'your file 98.mp3' -> 'your file.mp3'
$ ls
1234.mp3 filename.mp3 'my file.mp3' 'your file.mp3' zzz.mp3
这使用了 bash 的延长图案匹配文件名末尾的空格后跟 1 个或多个数字,后跟“.mp3”。
答案2
和zsh
:
首先,将函数标记为自动加载(如果您要经常使用该函数,则zmv
最好):~/.zshrc
autoload -Uz zmv
然后:
zmv -n '(**/)(*)( *)(.mp3)' '$1$2$4'
如果满意,请删除-n
(试运行)。
仅当最后一个空格之后的部分是十进制数字序列时才重命名文件:
zmv -n '(**/)(*)( <->)(.mp3)' '$1$2$4'
(或仅<98-1234567>
代替<->
该范围内的数字)。
匹配(**/)
任何级别的子目录。如果您只想重命名当前目录中的文件,那么只需:
zmv -n '(*)( *)(.mp3)' '$1$3'