異なるディレクトリに複数のファイルを作成する

異なるディレクトリに複数のファイルを作成する

以下の内容を含む 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代わりに を使用すると、存在しないファイルに対してはコマンドがエラーを返すので、作成してください。また、コマンド(またはcatcattouchechoprintf@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

max注意2:値を削除するか、値をパラメータとして取得することでコードを簡素化できます。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

関連情報