2012-01-04 87 views
1

我需要用以下幫助:替換在重命名文件

我有這些文件與名稱: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 

你能幫我嗎?

+1

你的意思是'ABC.rt2' - >'ABC.rt2-CD'? (與'rt1'相反)。 – Thor84no 2012-01-04 12:03:39

回答

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 

不要試圖塞進所有的單行線,它是不可讀的,你的語法,最終是不正確。

+0

好的,非常感謝! – user1116360 2012-01-04 12:07:42

+0

+1爲「不要嘗試和在一行中填塞所有...」! – shellter 2012-01-07 04:36:20

4

在這個特定的例子中,做兩個循環可能更容易?

for i in *[1357];do mv -v $i $i-AB;done 
for i in *[2468];do mv -v $i $i-CD;done 

如果需要創建一個通用解決方案,請讓我知道,我會幫助更多。

0
perl -e'while(<*.rt?>) { rename $_, $_.($1 % 2 ? "-AB" : "-CD") if /\.rt(\d)$/ }' 

前:

a.rt1 a.rt2 

後:

a.rt1-AB a.rt2-CD 

注:這是你的問題的例子不同。

0

在這裏,你走了,所有的慶典,簡明扼要:

for f in *[1-8] 
do 
    mv $f $f-`echo $f | grep -q '[1357]$' && echo AB || echo CD` 
done