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

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

Мне нужно создать 1000 входных файлов, содержащих:

x=i, i изменяется от 1 до 1000

у=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}, ..., просто удалите {}команду mkdirи cdвнутри вашего цикла:

    mkdir -p dir$i
    cd dir$i

Примечание 2: Вы можете упростить свой код, удалив 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

Связанный контент