.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
이 이벤트를 사용하거나 다른 곳에 파일을 생성하고 완료되면 모니터링되는 디렉터리로 이동하여 이를 방지할 수 있습니다.
나는 이것이 쉘 스크립트에서 수행해서는 안되는 작업 중 하나라고 생각합니다. 여기에서는 판독기와 작성자 간에 동기화가 필요하며 신뢰 경계가 존재할 수도 있고 존재하지 않을 수도 있습니다.