1

すべてのファイルを入れて obj2opengl.pl を実行したい

/Users/KanZ/デスクトップ/プロジェクト/テスト/モデル/オブジェクト

名前は A001.obj A002.obj ... スクリプトを実行した後、A001.h A002.h を取得します ... これらのファイルを次の場所に移動したいと思います

/Users/KanZ/デスクトップ/プロジェクト/テスト/モデル/ヘッダー

このコードを以下に適応させるにはどうすればよいですか *問題は A${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
4

3 に答える 3

0

bash は C ではなく、、、forおよびifすべて[のコマンドであり、他の単語と区切るために空白が必要です。

使用する

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マニュアルを参照してください${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
于 2013-01-04T12:01:32.930 に答える
0
if[$c > 9] then
   b++

ここに構文エラーがあると思います。[はシェルのコマンドであり、1 つ以上の引数を取り、最後の引数は である必要が[あるため、スペースを使用してコマンドと引数を区切る必要があり、 と の間にもスペースが必要ifです[

別のエラー、シェルは 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
于 2013-01-04T10:20:58.043 に答える
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 \;
于 2013-01-04T06:37:52.917 に答える