我正在尝试学习使用命令行重命名文件,在浏览了很多页面后,我终于找到了一个将文件首字母大写的命令,但问题是我想要了解每个命令的含义。该命令是:
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 的解释非常符合您的特定要求。如果您有兴趣,以下是一些额外的网络资源,可供您了解更多信息:
重击:
- 温柔的介绍:Linux 文档项目;Bash 操作方法
- 很棒的常见问题解答:Greg's Bash 常见问题解答
- 更深入: tldp Bash 高级脚本
- 权威指南:GNU 参考指南
Sed(即“S”流“ED”器):
- 温柔的介绍:sed 单行命令详解
- 权威教程:布鲁斯·巴内特
- 权威指南:GNU Sed 参考手册
答案4
如果你有 zsh:
for i in *; do mv $i ${(C)i}; done