주어진 파일과 공통된 부분을 가진 텍스트 파일

주어진 파일과 공통된 부분을 가진 텍스트 파일

다른 파일에서 추출된 섹션이 있는 디렉터리에 저장된 일반 텍스트 파일 집합을 유지해야 합니다. 예는 다음과 같습니다:

문서:

/directory/textfile1 (every other file in the directory needs to "include" the
                      full contents of this file, each file can do so at a
                      different starting position; this file changes often      )
/directory/textfile2 ("includes" textfile1 after a few lines from the top       )
/directory/textfile3 ("includes" textfile1 as a header                          )
/directory/textfile4 ("includes" textfile1 as a footer                          )

textfile1을 변경한 후 파일 시스템 읽기 조회수 textfile{2..4}이 textfile1의 새 콘텐츠를 포함하는 업데이트된 버전을 반환하도록 하고 싶습니다.

웹 서버에서는 전통적인 서버측 include 지시문을 사용하여 이 문제를 해결할 수 있습니다. 이제 프런트엔드 서비스를 실행하지 않고 어떻게 이 작업을 수행할 수 있나요?

다른 inode를 가리키는 대신 사용자 정의 "재분석 지점"을 정의하는 것처럼 일부 사용자 정의 코드를 실행하고 stdout을 파일의 내용으로 표시하는 심볼릭 링크를 만들 수 있습니까?

예를 들어, 가상의 "symlink"는 textfile3 파일에 대해 다음 명령을 실행합니다.

cat /directory/textfile1 /directory/textfile3_static

이는 내용이 textfile1에 따라 달라지는 정적 파일의 존재를 시뮬레이션합니다.

나는 특별한 마운트 지점이나 그와 유사한 것을 위한 사용자 정의 FUSE 모듈을 작성하는 것보다 최소한의 사용자 정의를 사용하는 솔루션을 찾고 있습니다.

나는 여기서 잘못된 방향으로 생각할 수도 있습니다. textfile1이 수정될 때마다 자리 표시자를 대체하기 위해 업데이트 스크립트를 트리거하는 것이 더 쉬울 수도 있습니다. 폴링 없이 이 이벤트를 어떻게 포착할 수 있나요?

다음은 몇 가지 샘플 텍스트 파일입니다.

콘텐츠:

/directory/textfile1:
--------------------------------------------------------------------------------
Ferma non stai sei come un ciclone
e non dormi mai
--------------------------------------------------------------------------------

/directory/textfile2:
--------------------------------------------------------------------------------
Juny tu hai un cervellone
quasi tutto sai
Ma quando fai un'invenzione
sono sempre guai
Ferma non stai sei come un ciclone
e non dormi mai
Il centauro Nico ami già
ma lui forse non lo sa
--------------------------------------------------------------------------------

/directory/textfile3:
--------------------------------------------------------------------------------
Ferma non stai sei come un ciclone
e non dormi mai
Il centauro Nico ami già
ma lui forse non lo sa

Come sempre insisterai
allora che pasticci tu di nuovo farai
--------------------------------------------------------------------------------

...등. :)

답변1

어떻게 든 @polynomial 답변은 다음과 같이 번역됩니다 bash.

#!/bin/bash

if [[ ! -e textfile2 ]]; then
  mkfifo textfile2
fi

while true; do
  (
    exec >textfile2
    cat textfile2-header
    cat textfile1
    cat textfile2-footer
  )
done

답변2

명명된 파이프를 사용하여 이 작업을 수행할 수 있습니다. 기본적으로 텍스트 파일을 다음 Perl 예제와 같은 "템플릿" 및 스크립트로 저장할 수 있습니다.

http://perl.active-venture.com/pod/perlipc-pipes.html

"textfile3"을 파이프로 열고 읽기 요청을 받으면 textfile3에 포함되어야 하는 내용을 덤프합니다(아마도 textfile3.template을 읽고 필요에 따라 내용을 바꿈). 이렇게 하면 여러 파일을 업데이트하지 않고도 최소한의 구성으로 콘텐츠를 동적으로 변경할 수 있습니다.

관련 정보