대용량 파일의 어느 곳에서나 발생할 수 있는 변경 사항을 모니터링하는 방법은 무엇입니까?

대용량 파일의 어느 곳에서나 발생할 수 있는 변경 사항을 모니터링하는 방법은 무엇입니까?

파일에서 가능한 변경 사항을 보고 싶습니다. 일반적으로 tail -f fileor 을 사용하면 watch -d cat file트릭을 수행할 수 있습니다. 하지만 file제가 모니터링하는 내용은 너무 커서 한 화면에 다 담기 힘들고, 변경 사항이 반드시 특정 위치(예: 끝 부분)에서 발생하는 것도 아닙니다.

변화를 어떻게 관찰하나요? 이상적으로는 watch -d cat file적어도 하나의 변경 사항이 화면에 표시되도록 비슷한 스크롤 효과를 갖고 싶습니다 .

이게 무슨 용도인지 궁금하시다면 제가 사용하고 있는리튬대용량 파일을 최소화할 때 최소화 프로세스에서 잠재적인 오류에 대한 힌트가 나타나는 경우가 많기 때문에 진행 상황을 지켜보는 것을 좋아합니다.

답변1

watch=/path/to/file
tmp="$watch".$$
cp "$watch" "$tmp".1
while true; do
    clear
    cp "$watch" "$tmp".2
    diff -u "$tmp".1 "$tmp".2
    mv "$tmp".2 "$tmp".1
    sleep 10
done

전체 파일의 복사본을 만드는 데 필요한 공간 및/또는 시간이 걱정된다면 요구 사항을 충족하기 위해 이 문제를 해결할 방법이 실제로 없다는 점을 깨달아야 합니다. watch -d현재 출력과 비교하려면 마지막 출력도 유지해야 합니다.

답변2

무한 루프를 사용하여 파일을 폴링하는 것은 나쁜 생각입니다. 내 제안은 nodejs를 설치하고 사용하는 것입니다.fs.watch파일.

fs.watchFile('message.text', (curr, prev) => {
  console.log(`the current mtime is: ${curr.mtime}`);
  console.log(`the previous mtime was: ${prev.mtime}`);
});

터미널에서 한 줄 명령을 원하면 다음을 수행합니다.

node -e "fs.watchFile('message.text', (curr, prev) => {
  console.log(`the current mtime is: ${curr.mtime}`);
  console.log(`the previous mtime was: ${prev.mtime}`);
});"

관련 정보