Vas*_*ass 5 shell shell-script
我有一个文件目录,
Measurements Panama 2009-03-22 Session1.xml
Measurements Panama 2009-03-22 Session2.xml
Measurements Panama 2009-03-22 Session3.xml
Measurements Panama 2009-03-22 Session4.xml
...
Measurements Panama 2009-03-22 Session10.xml
Run Code Online (Sandbox Code Playgroud)
我想删除空格和-破折号。我不想使用重命名命令,因为我不知道 perl 或正则表达式。从另一篇文章中删除部分文件名的建议是:
for f in *.png; do mv $f ${f#image}; done
Run Code Online (Sandbox Code Playgroud)
这看起来不错。我无法弄清楚该#字符的作用(我假设它从文件名中删除了字符串“image”?),无论如何 - 我如何删除空格和破折号?
执行时出现文件不是目录的错误
[jings]s0128943: for f in *.xml; do mv $f ${f//[ -]/};done
mv: target `MeasurementsPanama20090322Session10.xml' is not a directory
mv: target `MeasurementsPanama20090322Session1.xml' is not a directory
Run Code Online (Sandbox Code Playgroud)
等所有文件。
您可以${...}在 shell 的手册页中找到替换信息,例如bash(1)。最普遍的:
${var#word}除去最短前缀:变量的值var与所述word前缀(如果有的话)中除去;
${var%word}除去最短后缀:变量的值var与所述word后缀移除(如果有的话)。
${var/pattern/replacement} 删除第一次出现的模式
${var//pattern/replacment} 删除所有出现的模式
因此,在您的示例中,${f#image}扩展为f(eg,
image01.png) 删除image前缀的值,因此它产生值
01.png。
扩展中的word和replacement部分${...}受制于与文件名相同的通配符扩展;因此,如果你想删除空格和-,你可以使用${f//[ -]/}
(替换任何出现的字符和-空字符串。
手册页上的所有详细信息。
| 归档时间: |
|
| 查看次数: |
2521 次 |
| 最近记录: |