Linux 重命名文件中的替换
我需要以下方面的帮助: 我有这些文件的名称:Linux 重命名文件中的替换,linux,bash,shell,Linux,Bash,Shell,我需要以下方面的帮助: 我有这些文件的名称:ABC.rt1,ABC.rt2,ABC.rt8 我应该按以下方式重命名它们:如果在.rt${I}末尾的数字是奇数,那么用appendig AB替换扩展名,否则用CD替换扩展名。例如,我期望这些输出: ABC.rt1-->ABC.rt1ab ABC.rt2-->ABC.rt1 CD。。。等等 我尝试使用此简单脚本,但不起作用: for i in `seq 1 8`; do mv -v ./ABC.rt${i} ./ABC.rt${if [ $(( $i
ABC.rt1,ABC.rt2,ABC.rt8
我应该按以下方式重命名它们:如果在.rt${I}
末尾的数字是奇数,那么用appendig AB替换扩展名,否则用CD替换扩展名。例如,我期望这些输出:
ABC.rt1
-->ABC.rt1ab
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
你能帮我吗?试试:
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
不要试图把所有这些都塞进一行,因为这是不可读的,而且你的语法也不正确。试试:
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
不要试图把所有这些都塞进一行,这是不可读的,你的语法也不正确。在这个特定的例子中,可能更容易做两个循环
for i in *[1357];do mv -v $i $i-AB;done
for i in *[2468];do mv -v $i $i-CD;done
如果需要创建通用解决方案,请让我知道,我会提供更多帮助。在这个特定示例中,创建两个循环可能更容易
for i in *[1357];do mv -v $i $i-AB;done
for i in *[2468];do mv -v $i $i-CD;done
perl -e'while(<*.rt?>) { rename $_, $_.($1 % 2 ? "-AB" : "-CD") if /\.rt(\d)$/ }'
如果需要创建通用解决方案,请让我知道,我会提供更多帮助
perl -e'while(<*.rt?>) { rename $_, $_.($1 % 2 ? "-AB" : "-CD") if /\.rt(\d)$/ }'
之后:
a.rt1-AB a.rt2-CD
注意:这与您问题中的示例不同
之后:
a.rt1-AB a.rt2-CD
注意:它与您问题中的示例不同。给您,所有内容都是bash,简短明了:
for f in *[1-8]
do
mv $f $f-`echo $f | grep -q '[1357]$' && echo AB || echo CD`
done
给你,所有的bash,简洁明了:
for f in *[1-8]
do
mv $f $f-`echo $f | grep -q '[1357]$' && echo AB || echo CD`
done
你是说
ABC.rt2
-->ABC.rt2 CD
?(与rt1
)相反。你的意思是ABC.rt2
-->ABC.rt2 CD
?(与rt1相反)。