2013-01-04 132 views
1

我願與所有文件我如何可以使運行腳本另一個腳本

/用戶/ KanZ /桌面/項目/測試/型號/對象

運行obj2opengl.pl

這是名A001.obj A002.obj ... 運行該腳本後,我會得到A001.h A002.h ...我想將這些文件移動到

/用戶/ KanZ/Desktop/Project/Test/Model/Header

我如何能適應以下 這段代碼*的問題都處於$ {I} .OBJ和A $ {I} .H

cd /Users/KanZ/Desktop/Project/Test/Model/Object 
start=1 
n=$(find . -name "*.obj" | wc -l) 
end=$(($n)); 
for((i=$start;i<=$end;i++)) 
do 
./obj2opengl.pl "A${i}.obj" 
mv "A${i}.h" /Users/KanZ/Desktop/Project/Test/Model/Header 
done 

如果我用if語句適應我的代碼,如何解決爲正確的語法例如下面的代碼:

cd /Users/KanZ/Desktop/Project/Test/Model/Object 
start=1 
a=0 
b=0 
c=1 
n=$(find . -name "*.obj" | wc -l) 
end=$(($n)); 
for((i=$start;i<=$end;i++)) 
do 
    ./obj2opengl.pl "A${a}${b}${c}.obj" 
    mv "A${i}.h" /Users/KanZ/Desktop/Project/Test/Model/Header 
    c++ 
if[$c > 9] then 
    b++ 
    c=0 
fi 
if[$b>9] then 
    a++ 
    b=0 
    c=0 
fi 
done 

回答

0
cd /Users/KanZ/Desktop/Project/Test/Model/Object 

find . -name "A*.obj" -exec obj2opengl.pl {} \; 
find . -name "A*.h" -exec mv {} /Users/KanZ/Desktop/Project/Test/Model/Header \; 
+0

它錯誤。找到:obj2opengl.pl:沒有這樣的文件或目錄。但我已經把obj2opengl.pl放入/ Users/KanZ/Desktop/Project/Test/Model/Object – kantawit

+0

@ kantawit,將它改爲'-exec ./obj2opengl.pl' – perreal

+0

沒有.h文件。輸入文件名稱,例如。 dog.obj找到後。 -name「A * .obj」-exec ./obj2opengl.pl因爲它告訴用法: obj2opengl [選項]文件 使用-help或-man進一步的信息 – kantawit

0
if[$c > 9] then 
    b++ 

我覺得這裏是SYN稅收錯誤。 [是shell中的命令,需要一個或多個參數,最後一個參數必須是[,因此必須使用空格來分隔命令和參數,並且還需要在if[之間的空格。

另一個錯誤,shell不支持c風格++,可以用b=$[b+1]

這裏是正確的代碼:

cd /Users/KanZ/Desktop/Project/Test/Model/Object 
start=1 
a=0 
b=0 
c=1 
n=$(find . -name "*.obj" | wc -l) 
end=$(($n)); 
for((i=$start;i<=$end;i++)) 
do 
    ./obj2opengl.pl "A${a}${b}${c}.obj" 
    mv "A${i}.h" /Users/KanZ/Desktop/Project/Test/Model/Header 
    c=$[c+1] 
if [ $c > 9 ] then 
    b=$[b+1] 
    c=0 
fi 
if [ $b > 9 ] then 
    a=$[a+1] 
    b=0 
    c=0 
fi 
done 
+0

'for'命令後還需要空格 –

+0

這是錯誤的。它告訴我第17行:意外標記'fi'附近的語法錯誤 – kantawit

0

的bash不是C,forif[是所有命令和需要空白將它們從換句話說分離。

使用

cd /Users/KanZ/Desktop/Project/Test/Model/Object 
for file in *.obj 
do 
    h=${file%.obj}.h 
    ./obj2opengl.pl "$file" 
    mv "$h" ../Header 
done 

bash manual解釋${file%.obj}部分

如果你想算,不要手動跟蹤前導零的,使用printf

max_width=${#end} 
for ((i=$start; i<=$end; i++)); do 
    printf -v n "%0*d" $max_width $i 
    obj="A$n.obj" 
    h="A$n.h" 
    ./obj2opengl.pl "$obj" 
    mv "$h" ../Header 
done 
相關問題