2016-07-05 9 views
1

私はmainというフォルダを持っています。私はこのフォルダをすべてのファイルと一緒に300回複製し、それぞれの新しいフォルダの名前をexample0、example1、example2、example3 .... example300と変更します。フォルダを重複し、そのフォルダのファイル内の値を変更します

フォルダ内には多くのファイルがあります。 config.iniファイルを探して、この行 "amount = 0"を毎回探し、新しいフォルダが作成されるたびに0ずつ1ずつ増分します。

example0フォルダの設定ファイル量の値は0、example1フォルダの設定ファイル量の値は1になります。以下同様です。

私はこれで何か助けを得ることができます。私は手動でフォルダを作成したでしょうが、300は少しです。よりシンプルな方法を探してください。ありがとう。

答えて

5
for i in {0..300} # for loop to iterate from 0 to 300 
do 
cp -R main "example$i" 
sed -i "s/amount = 0/amount = $i/" "example$i/config.ini" 
done 

とする必要があります。


ここで何が起こっているか

  1. for-loopは、その値が順次0から300
  2. cp -R main "example$i"に進んで再帰的にように、例1をexample0するメインコピーして、あなたのためのカウンターiを開きます。
  3. sedコマンドは、ケアの文字列を代入量= 0へ=カウンタを取り、-iオプションは、編集インプレースになります。
+2

で最初の行を置き換える

正確に置き換えるにはsedスクリプトの末尾にgをスキップすることができます{1..300}で私のために。 – SLePort

+0

@Kenavoz:ありがとう、しかし 'c'の背景から来て、私は他の方法を感じる。とにかく編集:)実際には、{0..300}の私は{0.300}の要求に合っています – sjsam

+1

@sjsamコード内で何が起こっているのかについての簡単な説明を本当に感謝します。ありがとうございます。 –

1

あなたはこれを試してみて、あなたは、このスクリプトの最初の引数として乗算するフォルダの最大値を渡すことができます:

#!/bin/bash 
for i in $(seq 1 $1) ; do 
    cp -r main example$i 
    sed -i "s/amount = 0/amount = $i/g" "example$i/config.ini" 
done 

説明:

cpディレクトリexampleXmainの再帰的なコピーを行いますXは、1からスクリプトの最初の引数として渡される値の範囲の数値です。

sedamount = 0をすべてamount = X(Xは数字に等しい)に置き換えます。一つだけamount = 0はconfig.iniの中に存在する場合は、 `Bashのスタイルのループは少し読みやすくも300回は

for i in $(seq 1 300) ; do 
+0

'sed'で' g'フラグを使う必要があるかどうか分からず、 'example $ i/config.ini'を二重引用符で囲むことをお勧めします。 – sjsam

+0

真。 'g'はグローバルな置換えです。私は編集します。ありがとう – lewiatan

関連する問題