此解决方案(如下所列)有效,但它看起来不是最实用的解决方案。我想要做的是填充一个名为t _ ### _ u的子文件夹,然后用两个文件填充这些子目录(其中一个应该重命名为父目录名并附加.c)任何人都可以发布一个更好,更优雅的解决方案?
for i in {1..100}
do
mkdir `printf "t_%03d_u" $i`;
cp ./templates/* `printf "t_%03d_u" $i`;
mv `printf "./t_%03d_u/template.c" $i` `printf "./t_%03d_u/t_%03d.c" $i $i`;
done
echo "Did it work?"
感谢您提前提供任何帮助。
答案 0 :(得分:2)
改进脚本最明显的方法是为您使用的名称指定一个变量:
name=`printf "t_%03d" $i`
所以你可以做到
mkdir ${name}_u
cp ./templates/* ${name}_u/
mv ./${name}_u/template.c ./${name}_u/$name.c
答案 1 :(得分:1)
Bash 4。
for num in {001..100}
do
path="t_${num}_u"
mkdir "$path"
cp ./templates/* "$path";
mv $path/template.c ./$path/t_${num}.c
done
答案 2 :(得分:1)
seq -w
非常有用:)
#!/bin/bash
for i in `seq -w 1 100`
do
mkdir t_${i}_u
cp ./templates/* t_${i}_u
mv ./t_${i}_u/template.c ./t_${i}_u/t_${i}_u.c
done
echo "Did it work?"
我确信通过计算一次目录的名称并重新使用它可以进一步改进,但这更好,我可以在这里停下来。 :)
答案 3 :(得分:0)
我唯一的建议是将零填充字符串设置为变量以便于阅读:
for i in {1..100}
do
s=$(printf "%03d" $i)
mkdir t_${s}_u
cp ./templates/* t_${s}_u
mv ./t_${s}_u/template.c ./t_${s}_u/t_${s}.c
done
答案 4 :(得分:0)
for i in $(seq -w 1 100); do
mkdir t_${i}_u
cp templates/* t_${i}_u
mv t_${i}_u/template.c t_${i}_u/t_${i}.c
done
尚未测试过。
答案 5 :(得分:0)
您可以将printf的结果保存在变量中,而不是每次都重新执行。或者只使用seq -w 1 100
生成数字:
for i in $(seq -w 1 100)
do
d=t_${i}_u
mkdir $d
cp templates/* $d
mv $d/template.c $d/t_$i.c
done