Criando vários arquivos em diretórios diferentes

Criando vários arquivos em diretórios diferentes

Preciso criar 1000 arquivos de entrada contendo:

x = i, i varia de 1 a 1000

y=5

Cada arquivo deve ser colocado em um diretório separado. Tentei:

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

O que falha

Responder1

Se bem entendi, você quer algo assim:

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

Responder2

Seu código está errado, seria melhor em cd ..vez de cd inpe touchem vez de cat( cato comando retornaria um erro para um arquivo inexistente, touchcrie-o). Além disso, use echoo comando (ou printfconforme mencionado em@terdon resposta) para gravar em um arquivo.

Então, se você quiser apenas usar seu código sem erros, você pode fazer isso conforme abaixo:

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: se você quiser que seu arquivo seja nomeado como dir1, dir2, ... em vez de dir{1}, dir{2}, ..., basta remover {}e mkdircomandar cddentro do seu loop:

    mkdir -p dir$i
    cd dir$i

NB2: Você pode simplificar seu código removendo maxvalor ou obtendo maxvalor como parâmetro; com um script chamado script.sh, seria assim ao executá-lo:

script.sh 100

e o código:

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

informação relacionada