2013-01-04 135 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 
相关问题