Creando varios archivos en diferentes directorios

Creando varios archivos en diferentes directorios

Necesito crear 1000 archivos de entrada que contengan:

x=i, i varía de 1 a 1000

y=5

Cada archivo debe colocarse en un directorio separado. Lo intenté:

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

que falla

Respuesta1

Si te entendí correctamente, quieres algo como esto:

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

Respuesta2

Su código es incorrecto, sería mejor con cd ..en lugar de cd inpy touchen lugar de cat( catel comando devolvería un error para un archivo inexistente, touchcréelo). Además, use echoel comando (o printfcomo se menciona en@terdon respuesta) para escribir en un archivo.

Entonces, si solo desea utilizar su código sin errores, puede hacerlo de la siguiente manera:

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: si desea que su archivo se llame como dir1, dir2, ... en lugar de dir{1}, dir{2}, ..., simplemente elimínelo {}y mkdirordene cddentro de su bucle:

    mkdir -p dir$i
    cd dir$i

NB2: Puede simplificar su código eliminando maxvalor u obteniendo maxvalor como parámetro; con un script llamado script.sh, quedaría así al ejecutarlo:

script.sh 100

y el 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

información relacionada