Erstellen mehrerer Dateien in unterschiedlichen Verzeichnissen

Erstellen mehrerer Dateien in unterschiedlichen Verzeichnissen

Ich muss 1000 Eingabedateien erstellen, die Folgendes enthalten:

x=i, i variiert von 1 bis 1000

y = 5

Jede Datei muss in einem separaten Verzeichnis abgelegt werden. Ich habe Folgendes versucht:

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

Was scheitert

Antwort1

Wenn ich Sie richtig verstanden habe, möchten Sie so etwas:

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

Antwort2

Ihr Code ist falsch. Es wäre besser, cd ..statt cd inp, und touchstatt cat( catwürde der Befehl einen Fehler für eine nicht vorhandene Datei zurückgeben, toucherstellen Sie sie). Verwenden Sie außerdem echoden Befehl (oder printfwie in erwähnt@terdon Antwort), um in eine Datei zu schreiben.

Wenn Sie also einfach Ihren Code ohne Fehler verwenden möchten, können Sie das wie folgt tun:

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

NB: Wenn Sie Ihre Datei als dir1,, dir2… statt dir{1},, dir{2}… benennen möchten, entfernen Sie einfach {}in mkdirund cdden Befehl innerhalb Ihrer Schleife:

    mkdir -p dir$i
    cd dir$i

NB2: Sie können Ihren Code vereinfachen, indem Sie maxden Wert entfernen oder maxals Parameter abrufen. Bei einem Skript mit dem Namen script.shwürde es bei der Ausführung folgendermaßen aussehen:

script.sh 100

und der Code:

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

verwandte Informationen