루프는 디렉터리에 있는 300개 파일에 명령을 적용하고 원래 입력 파일 이름과 새 텍스트를 포함하여 출력 이름을 바꿉니다.

루프는 디렉터리에 있는 300개 파일에 명령을 적용하고 원래 입력 파일 이름과 새 텍스트를 포함하여 출력 이름을 바꿉니다.

svr_vars라는 코드가 있습니다. 300개의 서로 다른 파일이 포함된 디렉토리가 있습니다. 나는 그것을 반복하고 디렉토리의 각 파일에 대해 코드를 실행하고 싶습니다. svr_vars 코드는 공통 파일 이름 svr_vars.txt를 출력합니다. 따라서 코드를 실행할 때마다 svr_vars.txt 파일 이름을 덮어씁니다. 따라서 코드를 실행할 때마다 이름을 바꿔야 합니다.

1995051200_72259.txt <= 디렉토리에 있는 파일은 어떤 모습인가요?

출력 이름을 svr_vars.txt에서 svr.1995051200_72259.txt로 바꾸고 싶습니다.

답변1

질문을 올바르게 이해했다면 기본적으로

svr_vars 1995051200_72259.txt

프로그램이 라는 출력을 생성하면 svr_vars.txt이름을 다음으로 바꾸고 싶습니다.svr.1995051200_72259.txt

300개의 파일이 모두 숫자로 시작하고 숫자로 끝난다고 가정하면 다음 .txt과 유사한 루프를 수행할 수 있습니다.

#!/bin/bash
for file in [1-9]*.txt
do
  svr_vars "$file"
  mv svr_vars.txt "svr.$file"
done

제대로 작동하지 않으면 중단되도록 이 루프에 몇 가지 온전성 검사를 추가할 수 있습니다. 예를 들어

#!/bin/bash
for file in [1-9]*.txt
do
  if [ -e "svr.$file" ]
  then
    echo "$file already processed.  skipping"
  else
    svr_vars "$file"
    if [ ! -e svr_vars.txt ]
    then
      echo "Failed to create results for $file"
    else
      mv svr_vars.txt "svr.$file"
    fi
  fi
done

관련 정보