如何监视大文件中任何地方可能发生的更改?

如何监视大文件中任何地方可能发生的更改?

我想查看文件中可能发生的更改。通常,使用tail -f fileorwatch -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.watchFile

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}`);
});"

相关内容