2016-07-05 42 views
1

我有一個名爲main的文件夾。我想複製此文件夾及其所有文件300次,並將每個新文件夾重命名爲example0,example1,example2,example3 .... example300。複製文件夾並從該文件夾更改文件中的值

該文件夾中有很多文件。我想要找到文件config.ini,每次找到這一行「amount = 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打開櫃檯i你,它的值從0到300
  2. cp -R main "example$i"遞歸複製主順序去到example0,例1等。
  3. sed命令照顧替換字符串量= 0量=計數器-i選項使編輯就地。
+2

Bash的風格環路可能有點更具可讀性'因爲我在{1..300}'中。 – SLePort

+0

@Kenavoz:謝謝,但來自'c'背景我覺得其他方式。無論如何編輯:)實際上,對於{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做的main遞歸複製到目錄exampleX其中X是範圍從1到作爲腳本的第一個參數傳遞的值的數字。

sedamount = X代替每個amount = 0(X等於一個數字)。如果只有一個amount = 0在config.ini文件存在,您可以在sed腳本結束跳過g

要更換正好300倍代替在第一行以

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

不知道你需要'''''''''''sed'並且建議雙引號'example $ i/config.ini' – sjsam

+0

真。 'g'用於全球替代。我會編輯。謝謝 – lewiatan

相關問題