簡體   English   中英

編寫此Bash腳本的更好方法?

[英]A Better Way To Write this Bash Script?

此解決方案(下面列出)有效,但它看起來並不是最實用的解決方案。 我想做的是在一個子文件夾中填充一個名稱為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?"

感謝您的任何幫助。

改善腳本的最明顯方法是為您使用的名稱分配變量:

name=`printf "t_%03d" $i`

這樣就可以了

mkdir ${name}_u
cp ./templates/* ${name}_u/
mv ./${name}_u/template.c ./${name}_u/$name.c

重擊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

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?"

我相信可以通過一次計算目錄名稱並重新使用它來進一步改善它,但這已經足夠好了,我可以在這里停下來。 :)

我唯一的建議是將零填充字符串設置為變量以方便閱讀:

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

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

還沒有測試

您可以將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM