Создание нескольких файлов в различных каталогах

Я должен создать 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

Который перестал работать

0
задан 12 December 2019 в 12:54

2 ответа

Если я понял Вас правильно, Вы хотите что-то вроде этого:

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
1
ответ дан 21 December 2019 в 23:34

Ваш код неверный, это было бы лучше с 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
0
ответ дан 21 December 2019 в 23:34

Другие вопросы по тегам:

Похожие вопросы: