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