【发布时间】:2015-10-28 18:37:56
【问题描述】:
我有一个名为 /home/myuser/tmp* 的文件,它被短暂创建,记录了一条输出消息,然后被删除。我需要看到那个输出,但它最多只有一秒钟(我正在使用一个烦人的开源程序)。是否有像“tail -f /home/myuser/tmp*”这样的命令可以在文件创建后立即显示该文件的内容?
【问题讨论】:
我有一个名为 /home/myuser/tmp* 的文件,它被短暂创建,记录了一条输出消息,然后被删除。我需要看到那个输出,但它最多只有一秒钟(我正在使用一个烦人的开源程序)。是否有像“tail -f /home/myuser/tmp*”这样的命令可以在文件创建后立即显示该文件的内容?
【问题讨论】:
尝试打开另一个终端并编写一个尝试复制文件的循环。 在导致创建文件的操作之前启动它。创建脚本完成后,CTRL-C 终止另一个会话中的循环并查看它是否创建了保存的文件。您可能需要尝试几次,但它应该会在某个时候捕获该文件!
while :
do
cp /home/myuser/tmpfile /home/myuser/tmpfile.sav 2>/dev/null
done
如果文件已经存在,创建文件的进程可能只是附加到它上面。如果是这样,并且如果您知道它的名称,请使用该名称创建一个空文件并在另一个终端会话中执行tail -f,然后在第一个终端中运行该程序。不在循环中,只是一个tail -f tmpfile。
【讨论】:
如果 /home/myuser 中没有其他活动,您可以这样做:
inotifywait -e close /home/myuser && cat '/home/myuser/tmp*'
(文件名真的是tmp*,还是你问的是以tmp开头的任意命名的文件?如果是后者,这个解决方案显然行不通。
Inotifywait 将简单地阻塞直到/home/myuser 中的某个文件关闭,然后cat 文件关闭。如果您想查看多个文件,您可能更喜欢以下内容:
inotifywait -m -e close_write --format %f ~myuser |
while read file; do cat ~myuser/$file; done
但请注意有关包含空格的路径的标准警告和注意事项。
【讨论】: