我有数千个文件,名称如下:
PIN_PMN_PT_010_02_00331_0004_018edf
并需要将它们重命名为:
PIN_PMN_PT_010_02_00331_0004_018.edf
我使用了像这样的简单mv脚本:
for f in *; do echo mv "$f" "`echo $f | tr 'edf' '.edf'`"; done
由于某种原因,它会创建如下名称:
PIN_PMN_PT_010_02_00331_0004_018.ed
他们错过了最后一个f
。我正在使用echo运行脚本来进行空运行。有什么想法吗?
使用运行Mohave 10.14.6和Bash的MACBook Pro。
只需在任何外壳下:
为了进行测试,echo
以显示结果:
for file in *edf ;do echo mv "$file" "${file%edf}.edf" ;done
然后,为了完成这项工作:
for file in *edf ;do mv "$file" "${file%edf}.edf" ;done
(这在MacO上必须与在Linux上相同。)
for file in *edf ;do test -f "${file##*.edf}" && mv "$file" "${file%edf}.edf" ;done
语法${file##*.edf}
会将以终止的任何字符串替换.edf
为空字符串。所以test -f ""
会失败。
...仍然:我没有任何Mac可以进行测试,但是由于这是POSIX Standard,因此它必须可以在任何shell上运行。(让我知道,请发表评论!)
看看man sh
或man bash
搜索Parameter Expansion
man -P"less +'/Parameter Expansion'" bash
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句