Я должен создать 1 000 входных файлов, содержащих:
x=i, я варьируюсь от 1 до 1 000
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
Который перестал работать
Если я понял Вас правильно, Вы хотите что-то вроде этого:
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
Ваш код неверный, это было бы лучше с 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
<час> NB: если Вы хотите свой файл, названный как dir1
, dir2
... вместо dir{1}
, dir{2}
..., просто удаляет {}
в mkdir
и cd
команда в Вашей петле:
mkdir -p dir$i
cd dir$i
<час> NB2: Вы можете упростить свой кодекс, удалив max
стоимость или добравшись 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