我想查看文件中可能发生的更改。通常,使用tail -f file
orwatch -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}`);
});"