2013-01-18 69 views
1

我想重命名大量目錄,以便填充零。我正試圖運行包含viz目錄的目錄workingDir中的bash腳本。在viz目錄,我的目錄重命名使用bash填充零的目錄

visit_dump.0001
visit_dump.0005 visit_dump.11000 visit_dump.12000 visit_dump.504000

我怎樣才能它們重命名爲以下?

visit_dump.000001
visit_dump.000005 visit_dump.011000 visit_dump.012000 visit_dump.504000

另外,我不知道是否有最大的擴展目錄,這裏是504000將有6位以上或更小。

下面是一個非常奇怪的結果,企圖(我得到的消息printf: 04800: invalid octal number ,它完全分配錯誤的擴展目錄中的任何幫助將不勝感激謝謝

eulerDir=visit_dump 

dataDir=viz 

cd ./$dataDir 

for eulerDirIter in $(ls -d $eulerDir.*); do 
    number=$(echo $eulerDirIter |awk -F . '{print $NF}') 
    $(mv $eulerDirIter $(printf $eulerDir.%06d $number)); 
done 
+4

'重命名的/ \(\ d +)$/sprintf的 「%06D。」,$ 1。/e'viz/*' – melpomene

回答

3

查找在第一行中的最大數字擴展,並處理每個數字爲十進制不八進制:

max=$(for f in *; do echo "${f##*.}"; done | sort -n | tail -1) 
for f in *; do 
    base=${f%.*} 
    ext=${f##*.} 
    newext=$(printf "%0*d" ${#max} "$((10#$ext))") 
    echo mv "$f" "$base.$newext" 
done 
1

試試這個技巧:。

awk -F . '{print $NF+0}' 

的問題是,任何號碼以0開始被作爲八進制處理。因此,儘管0005八進制是一樣的5小數,像字符串被視爲八進制數,但不幸的是包含一個8,這使其成爲非法的八進制數。

您使用awk -F . '{print $NF}'來獲得在目錄的數字後綴,但你想將它們視爲數字,所以一個簡單的方法來轉換字符串04800爲數字是簡單的添加0它。 (awk不會將04800視爲八進制)。