use*_*294 7 linux shell command-line syntax
我正在尝试学习使用命令行重命名文件,在浏览了很多页面后,我终于找到了一个将文件首字母大写的命令,但问题是我想了解每个命令的含义. 命令是:
for i in *; do new=`echo "$i" | sed -e 's/^./\U&/'`; mv "$i" "$new";done
Run Code Online (Sandbox Code Playgroud)
我理解'for'有点......但不是'echo'或'`',尤其是sed命令。如果有人有一点耐心来解释每件事的含义那就太棒了!谢谢!
Pyl*_*lsa 16
for i in *;
do new=`echo "$i" | sed -e 's/^./\U&/'`;
mv "$i" "$new";
done;
Run Code Online (Sandbox Code Playgroud)
将整个代码分解以使其易于查看,我将在下面解释。
首先我们要确保我们处理了每个文件,下面这行的意思是:“只要你能找到文件,就执行以下操作”
for i in *;
Run Code Online (Sandbox Code Playgroud)
然后我们必须加载当前的文件名(存储在变量 $i 中),用大写版本替换第一个字母并存储新名称(在变量 $new 中)。
下面的命令基本上意味着: 使变量 $new ( do new=) 加载 $i 并将其转发 ( "$i" |) 到一个函数,该函数将第一个字母替换为大写字母。( sed -e 's/^./\U&/';`)
可以在此处找到 sed 手册页。它用于执行基本的文本转换。基本上做的是使用正则表达式('s/^./\U&/'部分)(一种检测文本中特定模式的方法)来检测未大写的第一个字符并将其替换为大写版本。
do new=echo "$i" | sed -e 's/^./\U&/';
Run Code Online (Sandbox Code Playgroud)
在我们获得新名称后,是时候用新的大写名称重命名文件了,下面的命令就是这样做的。
它说:将旧文件 foo.bar 移动(与重命名相同)到新的 Foo.bar。
mv "$i" "$new";
Run Code Online (Sandbox Code Playgroud)
所以我们现在重命名了一个文件,是时候移到下一个文件了。下面总结了 for 函数,告诉它现在是时候继续处理下一个文件了。
done;
Run Code Online (Sandbox Code Playgroud)
如果您sed不支持,这里有一些其他技术\U:
for i in *; do first=$(echo "${i:0:1}" | tr '[:lower:]' '[:upper:]'); new=$first${i:1}; mv "$i" "$new"; done
Run Code Online (Sandbox Code Playgroud)
如果你有 Bash 4:
for i in *; do mv "$i" "${i^}"; done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10862 次 |
| 最近记录: |