大容量ファイルのどこにでも発生する可能性のある変更を監視する方法は?

大容量ファイルのどこにでも発生する可能性のある変更を監視する方法は?

ファイルで可能な変更を見たいです。通常、tail -f fileorを使用するとwatch -d cat fileトリックを実行できます。しかし、file私が監視しているものは大きすぎて1つの画面に入れるのが難しく、変更は必ずしも特定の場所(たとえば、最後の部分)で発生するわけではありません。

変化をどのように観察しますか?理想的には、watch -d cat file少なくとも1つの変更が画面に表示されるように、同様のスクロール効果を持ちたいと思います。

これがどんな用途なのか気になるなら、私が使っているリチウム大容量ファイルを最小化すると、最小化プロセスで潜在的なエラーに関するヒントが表示されることが多いため、進行状況を確認するのが好きです。

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

端末で1行のコマンドが必要な場合は、次のようにします。

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

関連情報