서로 다른 디렉터리에 여러 파일 만들기

서로 다른 디렉터리에 여러 파일 만들기

다음을 포함하는 1000개의 입력 파일을 생성해야 합니다.

x=i, i는 1부터 1000까지 다양합니다.

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

어느 것이 실패했는지

답변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}, , ... 로 지정하려면 in을 dir{2}제거 하고 루프 내에서 명령을 내리세요.{}mkdircd

    mkdir -p dir$i
    cd dir$i

maxNB2: 값을 제거하거나 값을 매개변수로 가져와서 코드를 단순화할 수 있습니다 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

관련 정보