在不同目錄下建立多個文件

在不同目錄下建立多個文件

我需要建立 1000 個輸入文件,其中包含:

x=i, i 的範圍為 1 到 1000

y=5

每個文件都應放置在單獨的目錄中。我試過:

mkdir inp
cd inp
max=1000
for ((i=1;i<=max;i++)); do
    mkdir dir{$i}
    cd dir{$i}
    cat input_file.txt
    x=i > input_file.txt
    y=5 >> input_file.txt
    cd inp
done

哪個失敗了

答案1

如果我理解正確的話,你想要這樣的東西:

for ((i=1;i<=1000;i++)); do
    mkdir -p inp/dir$i
    printf 'x=%s\ny=5s\n' "$i" > inp/dir$i/input_file.txt
done

答案2

你的程式碼是錯誤的,最好用cd ..而不是cd inp,而touch不是catcat命令將傳回一個不存在的檔案的錯誤,touch創建它)。另外,使用echo命令(或printf如中提到的@terdon 回答) 寫入文件。

因此,如果您只想使用您的程式碼而不出現錯誤,您可以按如下方式執行操作:

mkdir -p inp
cd inp
max=1000
for ((i=1;i<=max;i++)); do
    mkdir -p dir{$i}
    cd dir{$i}
    touch input_file.txt
    echo x=i >> input_file.txt
    echo y=5 >> input_file.txt
    cd ..
done

注意:如果您希望檔案名稱為dir1, dir2, ... 而不是dir{1}, dir{2}, ... ,只需在循環中刪除{}inmkdir和命令:cd

    mkdir -p dir$i
    cd dir$i

maxNB2 :您可以透過刪除值或取得max值作為參數來簡化程式碼;對於名為 的腳本script.sh,執行它時會是這樣的:

script.sh 100

和代碼:

mkdir -p inp
cd inp
for ((i=1;i<=$1;i++)); do
    mkdir -p dir$i
    cd dir$i
    touch input_file.txt
    echo x=$i >> input_file.txt
    echo y=5 >> input_file.txt
    cd ..
done

相關內容