linux - 尾部最后修改的文件并监视 bash 中的新文件

标签 linux bash shell unix

我可以使用 ls --sort=time | tail -f 最后修改的文件头-1 | xargs tail -f 但我正在寻找也能连续运行第一部分的东西,即如果在 tail 命令运行时创建了新文件,它会切换到尾随新文件。我考虑过使用 watch 命令,但这似乎与 tail -f 配合使用效果不佳

最佳答案

看来你需要这样的东西:

#!/bin/bash

TAILPID=0
WATCHFILE=""

trap 'kill $(jobs -p)' EXIT     # Makes sure we clean our mess (background processes) on exit

while true
do
    NEWFILE=`ls --sort=time | head -n 1`
    if [ "$NEWFILE" != "$WATCHFILE" ]; then

            echo "New file has been modified"
            echo "Now watching: $NEWFILE";
            WATCHFILE=$NEWFILE
            if [ $TAILPID -ne 0 ]; then
                    # Kill old tail
                    kill $TAILPID
                    wait $! &> /dev/null # supress "Terminated" message 
            fi
            tail -f $NEWFILE &
            TAILPID=$!      # Storing tail PID so we could kill it later
    fi
    sleep 1
done

关于linux - 尾部最后修改的文件并监视 bash 中的新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36197824/

相关文章:

linux - 在集群上运行 Matlab 代码

linux - 路径,/usr/bin/和/usr/local/bin/

python - 如何省略 "connect: network is unreachable"消息

bash - 在 shell 脚本中使用 if elif fi

bash - 是否可以使用 awk 打印文件中的所有行,然后对单个列执行命令?

linux - Mediawiki 身份验证问题

linux - 集中式和分布式版本控制团队的优缺点

Java运行环境还是其他问题?

linux - 从长行中按位置删除字段

json - 如何在 bash 中用\"替换 JSON 文件中的引号?