当文件内容发生变化时输出文件内容

当文件内容发生变化时输出文件内容

我想在文件内容发生变化时输出它们,例如,如果我有该文件foobar并且我这样做:

magic_command foobar

当前终端应该显示文件的内容并且等待直到我不知道,我按了^C。

然后,如果从另一个终端我这样做:

echo asdf >> foobar

除了原始文件内容之外,第一个终端还应该显示新添加的行(当然,考虑到我没有按 ^C)。

答案1

您可以tail command使用-f

tail -f /var/log/syslog 

这是实时显示的好解决方案。

答案2

如果您想显示一个适合一个终端屏幕的短文件,并且正在更改的可能是整个文件,您可以使用watch

watch cat example.txt

Every 2.0s: cat example.txt                                Sun Aug  3 15:25:20 2014

Some text
another line

默认情况下,它每 2 秒显示一次整个文件,包括可选的标头:

选项-d( --differences) 将突出显示输出的先前版本或第一个版本的更改。

答案3

less有一个类似于tail -f-F打开时点击即可的跟随模式。

答案4

我有三个解决方案:

1) tail -f是个好主意

2)我们还必须tailf使用

3)第三个是 bash 脚本:

#!/bin/bash

GAP=10     #How long to wait
LOGFILE=$1 #File to log to

if [ "$#" -ne "1" ]; then
    echo "USAGE: `basename $0` <file with absolute path>"
    exit 1
fi


#Get current long of the file
len=`wc -l $LOGFILE | awk '{ print $1 }'`
echo "Current size is $len lines."

while :
do
    if [ -N $LOGFILE ]; then
        echo "`date`: New Entries in $LOGFILE: "
        newlen=`wc -l $LOGFILE | awk ' { print $1 }'`
        newlines=`expr $newlen - $len`
        tail -$newlines $LOGFILE
        len=$newlen
    fi
sleep $GAP
done
exit 0

相关内容