我需要以下方面的帮助:
我有这些名称为ABC.rt1, ABC.rt2, ... , ABC.rt8
我应该按照以下方式重命名所有这些:如果数字,我们在结尾i
说.rt${i}
是奇数,那么用appendig AB替换扩展名,否则用CD替换。例如,我希望这些输出:
ABC.rt1
- > ABC.rt1-AB
ABC.rt2
- > ABC.rt1-CD
......等等。
我尝试使用这个简单的脚本,但不起作用:
for i in `seq 1 8`; do mv -v ./ABC.rt${i} ./ABC.rt${if [ $(( $i % 2 )) -eq 0 ] ; then echo ${i}-CD; else echo ${i}-AB;fi};done
你能帮助我吗?
答案 0 :(得分:4)
在这个具体的例子中,制作两个循环可能更容易吗?
for i in *[1357];do mv -v $i $i-AB;done
for i in *[2468];do mv -v $i $i-CD;done
如果需要创建一般解决方案,请告诉我,我会提供更多帮助。
答案 1 :(得分:2)
尝试:
for i in `seq 1 8`; do
if [ $(( $i % 2 )) -eq 0 ] ; then
newext=${i}-CD
else
newext=${i}-AB
fi
mv -v ./ABC.rt${i} ./ABC.rt$newext
done
不要尝试将所有内容填入一行,这是不可读的,并且您的语法最终不正确。
答案 2 :(得分:0)
perl -e'while(<*.rt?>) { rename $_, $_.($1 % 2 ? "-AB" : "-CD") if /\.rt(\d)$/ }'
在:
a.rt1 a.rt2
后:
a.rt1-AB a.rt2-CD
注意:它与您问题中的示例不同。
答案 3 :(得分:0)
你走了,所有的bash,简短而简洁:
for f in *[1-8]
do
mv $f $f-`echo $f | grep -q '[1357]$' && echo AB || echo CD`
done