2016-08-29 50 views
0

我查看了其他主題,但我仍然在做錯。我是bash的初學者,如果我提出其他主題已經提出的問題,我很抱歉。 我的目的:改變添加數字給他們的多個文件的名稱。例如: 我的文件:filexx.txt,fileyy.txt,filezz.txt 結果我想: test_name_1_filexx.txt,test_name_2_fileyy.txt,test_name_3_filezz.txt重命名多個文件在bash中添加一個計數器

我至今寫:

#!/bin/bash 
COUNTER=1 
MYSTRING=test_name_ 
for i in *.txt 
do 
mv "$i" "$(printf $MYSTRING $COUNTER '_' $i)" 
COUNTER="$COUNTER"+1 
done 

以上基本上只留下最後一個文件在目錄中,並命名爲「test_name_」感謝您的幫助:)

回答

4

這裏有一個簡單的方法來重現你的問題:

$ printf foo bar baz 
foo 

「bar」和「baz」被忽略。這是因爲printf採取與格式說明一個消息,一些變量來代替:

$ printf "%s, %s and %s" foo bar baz 
foo, bar and baz 

因爲它看起來像你只是想連接的變量,沒有一點使用printf都:

#!/bin/bash 
counter=1 
mystring=test_name_ 
for i in *.txt 
do 
mv "$i" "${mystring}${counter}_${i}" 
counter=$((counter+1)) 
done 
1

隨着GNU的bash:

MYSTRING="test_name_" 
c=1; for i in *.txt; do echo mv -v "$i" "${MYSTRING}$((c++))_$i"; done 

如果輸出看起來不錯,除去echo