我有大约 2k 个文件,目前都是小写的,例如:
file_one.cfr
file_two.cfr
....
我正在寻找一种快速的方法将它们重命名为大写,以便它们就像;
FILE_ONE.cfr
FILE_TWO.cfr
....
如果我从我的 shell 中使用;
for i in *; do mv $i `echo $i | tr [:lower:] [:upper:]`; done
我可以将所有文件和文件扩展名转换为大写。
但是扩展名应该保持小写,所以我的方法不起作用。
欢迎任何编程语言。
答案1
您可以随时使用免费批量重命名实用程序。
答案2
在任何 shell 中:
for i in *.cfr
do
mv "$i" "$(echo ${i%.cfr} | tr [:lower:] [:upper:]).cfr";
done
它基于您提出的解决方案,但使用参数扩展${parameter%word}
从文件名中去除扩展名。
答案3
您的系统上可能已经有一个名为rename
或 的Perl 脚本prename
。
rename 's/([^.]*)/\U$1/' *.cfr
或者这里有一个 Vlad 脚本的版本,它消除了对grep
and的需要sed
(它可以在版本 4 之前的 Bash 版本中工作,因为它使用tr
而不是^^
运算符):
#!/bin/bash
for f in *.cfr
do
if [[ "$f" == "${f//.}" ]]; then continue; fi
name="${f%.*}"
ext="${f##*.}"
newfullname="$(<<< "$name" tr [:lower:] [:upper:])$ext"
[[ "$f" == "$newfullname" ]] || mv "$f" "$newfullname"
done
答案4
#!/bin/bash
for f in *
do
<<< $f grep -q "\." || continue
name=$(<<<$f sed 's/\.[^\.]*$//')
ext=$(<<< $f sed 's/^.*\(\.[^\.]*\)$/\1/')
newfullname=$(<<< $name tr [:lower:] [:upper:])$ext
[ "$f" == "$newfullname" ] || mv "$f" "$newfullname"
done