[编辑:在快速搜索工具后]
您可能想尝试 multitail - http://www.vanheusden.com/multitail/
如果您想坚持 Dennis Williamson 的回答(我已经相应地为他 +1),这里是为您填写的空白。
在您的 shell 中,运行以下脚本(或者它与 zsh 等效,我在看到 zsh 标记之前在 bash 中将其启动):
#!/bin/bash
TARGET_DIR="some/logfiles/"
SYMLINK_FILE="SoftwareLog.latest"
SYMLINK_PATH="$TARGET_DIR/$SYMLINK_FILE"
function getLastModifiedFile {
echo $(ls -t "$TARGET_DIR" | grep -v "$SYMLINK_FILE" | head -1)
}
function getCurrentlySymlinkedFile {
if [[ -h $SYMLINK_PATH ]]
then
echo $(ls -l $SYMLINK_PATH | awk '{print $NF}')
else
echo ""
fi
}
symlinkedFile=$(getCurrentlySymlinkedFile)
while true
do
sleep 10
lastModified=$(getLastModifiedFile)
if [[ $symlinkedFile != $lastModified ]]
then
ln -nsf $lastModified $SYMLINK_PATH
symlinkedFile=$lastModified
fi
done
使用普通方法对该进程进行后台处理(同样,我不知道 zsh,所以可能会有所不同)...
./updateSymlink.sh 2>&1 > /dev/null
然后tail -F $SYMLINK_PATH
让尾部处理符号链接的更改或文件的旋转。
这有点令人费解,但我不知道用尾巴做这件事的另一种方法。如果其他人知道处理此问题的实用程序,请让他们向前迈进,因为我也很想亲自看到它 - 默认情况下,像 Jetty 这样的应用程序会以这种方式记录日志,我总是编写一个在 cron 上运行的符号链接脚本以进行补偿为了它。
[编辑:从其中一行的末尾删除了错误的“j”。您还有一个错误的变量名称“lastModifiedFile”不存在,您设置的正确名称是“lastModified”]