작성된 .dat 파일 이름을 기반으로 bash 스크립트에서 정수를 변경하는 방법

작성된 .dat 파일 이름을 기반으로 bash 스크립트에서 정수를 변경하는 방법

.dat내 bash 스크립트에서 새로 작성된 파일 이름과 형식을 기반으로 문자열을 업데이트 하고 싶습니다 . 내가하려는 일은 다음과 같습니다.

  • blabla_3200.dat예를 들어, bash 스크립트에서 명명된 파일을 사용한 다음 해당 스크립트를 사용하여 케이스를 실행합니다.
  • 이 예제를 완료한 후 blabla_3300.dat동일한 디렉터리에 새 예제를 작성하세요.
  • blabla_3300.dat다음 실행에서는 동일한 bash 스크립트의 마지막 실행을 사용 하고 싶습니다 .

따라서 파일 이름에서 가장 큰 정수를 검색한 .dat다음 sed이를 사용하여 다음과 같이 bash 스크립트를 업데이트해야 합니다.

sed -i 's/3200/max/g' mybash.sh

그런 다음 새 사례를 실행합니다.

어떤 도움이라도 대단히 감사하겠습니다. 좋은 하루 보내세요!

댓글 지우기

나는 더 명확했어야 했다.

같은 디렉토리에 blabla_3200.dat, 가 있다고 가정해 보겠습니다 submission.sh.bash.sh

나는 프로그램에 submission.sh; read data blabla_3200.dat그런 다음 실행을 시작합니다.

submission.sh이 파일을 slurm 머신에 호출 하려면 sbatch submission.sh다음 명령을 내리세요.bash.sh

그런 다음 실행이 종료되고 프로그램은 blabla_4500.dat동일한 디렉터리에 출력 파일을 작성합니다(무엇이 작성될지는 알 수 없습니다. 예를 들어 blabla_8254.dat일 수 있습니다).

내가 원하는 것은 bash.sh의 코드가 새로운 출력이 나타날 때마다 submit.sh의 데이터 읽기 명령을 업데이트해야 한다는 것입니다. 이제 submit.sh에서 read data blabla_4500.dat명령을 실행해야 합니다.

답변1

소프트 링크를 사용하십시오 ln -s blabla_3300.dat .next.

.next그런 다음 스크립트에 rm .next;ln -s blabla3400.dat .next.

답변2

나는 디렉터리에 있는 모든 파일의 SHA256 해시를 계산하는 간단한 예를 생각해냈습니다. 무해하며 문제가 있는지 쉽게 확인할 수 있습니다. 다른 처리를 사용할 수 있습니다.

#!/bin/sh
inotifywait -m "$@" -e create | while read dir event file; do
    if [ -f "${dir}${file}" ]; then
        sha256sum "${dir}${file}"
    fi
done

여기에는 몇 가지 문제가 있지만 모두 해결하기 쉬운 것은 아닙니다.

  • 파일 이름에 줄 바꿈이 있으면 어떻게 되나요?이는 두 개의 별도 요소로 처리되며, 더 나쁜 것은 이러한 파일을 작성하는 사람이 스크립트에서 임의의 다른 파일을 처리하도록 강제할 수 있다는 것입니다. 이론적으로는 파일 이름에 나타날 수 없는 유일한 문자인 구분 기호를 사용할 수 있지만 이 옵션을 사용할 \0수는 없습니다 . 어쩌면 사용하지 않고 inotifywait를 반복적으로 호출하여 하나의 출력 = 하나의 파일을 알 수 있도록 하는 것이 더 나을 수도 있습니다. 하지만 그렇게 되면 많은 액션을 놓칠 수 있습니다!$IFS--format-m
  • 파일을 빠르게 생성하고 빠르게 삭제하면 이벤트가 누락될 수 있습니다.실제로는 그보다 더 나쁩니다. 누군가 일반 파일을 만든 다음 스크립트를 실행한 [ -f ${dir}${file} ]다음 삭제하고 심볼릭 링크를 만든 다음 스크립트가 임의의 파일에 대해 작업을 수행할 수 있습니다. 그러니까 내가 \0일을 잘하게 해도 상관없어요.
  • 처리 속도가 느립니다.파일이 생성되는 것보다 처리 시간이 더 오래 걸리면 지연 시간이 길어져 위의 문제가 더욱 악화됩니다. 이것은 좋은 배치로 쉽게 고칠 수 있습니다 &:)
  • 절반만 작성된 파일을 읽습니다.close_write이 이벤트를 사용하거나 다른 곳에 파일을 생성하고 완료되면 모니터링되는 디렉터리로 이동하여 이를 방지할 수 있습니다.

나는 이것이 쉘 스크립트에서 수행해서는 안되는 작업 중 하나라고 생각합니다. 여기에서는 판독기와 작성자 간에 동기화가 필요하며 신뢰 경계가 존재할 수도 있고 존재하지 않을 수도 있습니다.

관련 정보