다음을 포함하는 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}
제거 하고 루프 내에서 명령을 내리세요.{}
mkdir
cd
mkdir -p dir$i
cd dir$i
max
NB2: 값을 제거하거나 값을 매개변수로 가져와서 코드를 단순화할 수 있습니다 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