Tail

如何查看大文件中可能在任何地方發生的更改?

  • February 7, 2018

我想查看一個文件以了解可能發生的更改。通常,使用tail -f fileorwatch -d cat file就可以了。但是,file我正在監視的內容太大而無法在一個螢幕上顯示,並且更改不一定發生在特定位置(例如,結尾)。

我如何觀察變化?理想情況下,我想要這樣watch -d cat file的滾動,以便在螢幕上至少可以看到一個變化。

如果您想知道這是做什麼用的,我正在使用來最小化一個大文件,並且我喜歡觀察它的進度,因為最小化過程通常會揭示有關潛在錯誤的提示。

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還必須保留最後一個輸出以將其與目前輸出進行比較。

使用無限循環輪詢文件是個壞主意。我的建議是安裝 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}`);
});"

引用自:https://unix.stackexchange.com/questions/339165