将文件名首字母大写的命令说明

将文件名首字母大写的命令说明

我正在尝试学习使用命令行重命名文件,在浏览了很多页面后,我终于找到了一个将文件首字母大写的命令,但问题是我想要了解每个命令的含义。该命令是:

for i in *; do new=`echo "$i" | sed -e 's/^./\U&/'`; mv "$i" "$new";done

我理解“for”的意思……但不理解“echo”或“`”,尤其是 sed 命令。如果有人有耐心解释一下每件事的含义,那就太好了!谢谢!

答案1

for i in *; 
    do new=`echo "$i" | sed -e 's/^./\U&/'`;
    mv "$i" "$new";
done;

整个代码将被分解以使其易于查看,我将在下面进行解释。


首先我们要确保处理每一个文件,下面这一行意思是:“只要你能找到文件就执行以下操作”

for i in *;

然后我们必须加载当前的文件名(存储在变量 $i 中),用大写字母替换首字母并存储新名称(存储在变量 $new 中)。

以下命令的基本含义是:创建变量 $new(do new=)加载 $i 并将其转发("$i" |)给一个将首字母替换为大写字母的函数。(sed -e 's/^./\U&/';`)

sed 手册页可以在这里。它用于执行基本的文本转换。它基本上是使用正则表达式(部分's/^./\U&/')(一种检测文本中特定模式的方法)来检测非大写的首字符并将其替换为大写版本。

do new=echo "$i" | sed -e 's/^./\U&/';

获得新名称后,我们就可以使用新的大写名称来重命名文件了,以下命令可执行此操作。

它表示:将旧文件 foo.bar 移动(与重命名相同)到新的 Foo.bar。

mv "$i" "$new";

现在我们已经重命名了一个文件,是时候转到下一个文件了。下面总结了 for 函数,告诉它现在是时候继续处理下一个文件了。

done;

答案2

sed如果您不支持的话,这里还有其他几种技术\U

for i in *; do first=$(echo "${i:0:1}" | tr '[:lower:]' '[:upper:]'); new=$first${i:1}; mv "$i" "$new"; done

如果你有 Bash 4:

for i in *; do mv "$i" "${i^}"; done

答案3

欢迎来到 Bash,在这里,一切皆有可能,尽管不是很明显。

BloodPhilia 的解释非常符合您的特定要求。如果您有兴趣,以下是一些额外的网络资源,可供您了解更多信息:

重击:

Sed(即“S”流“ED”器):

答案4

如果你有 zsh:

for i in *; do mv $i ${(C)i}; done

相关内容