Answers:
只需使用bash,无需调用外部命令。
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
不加 #!/bin/sh
对于那些需要一线的人:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh
什么原因吗?我尝试过使用/不使用此语句。
#!/bin/bash
。这就是说,bash通常是许多计算机上的默认外壳,因此您不会发现很多不同之处:D您可以在此处
尝试rename
命令:
rename 's/_h.png/_half.png/' *.png
更新:
用法示例:
创建一些内容
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
测试解决方案:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls
什么?什么是rename ...
你试试?
rename
不是标准的Unix工具。
brew install rename
's//'
-我引用了man,有一个简单的提要:rename [options] expression replacement file...
在CentOS 7上,版本:rename from util-linux 2.23.2
.
任何字符,而不仅仅是一个点相匹配-字面点,使用\.
替代
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnew
与echo $fnew
作为第二线,以确保输出看起来神志清醒。
使用rename
用perl编写的实用程序。可能是默认情况下不可用...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
尽管答案是完整的,但我需要添加另一个缺失的答案。
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done