如何“追踪并跟踪”文件?


31

正在按顺序下载文件wget

如果我开始使用cat myfile.tar.bz2 | tar -xj来解包,它可能会正确解包,或者失败,并显示“意外的EOF”,具体取决于哪种速度更快。

如何“跟踪和跟踪”文件,即将文件内容输出到stdout,但不退出EOF,而是继续订阅该文件并继续输出数据的新部分,仅当文件被关闭时退出作家,并且在N秒内未重新打开。


我已经基于@arielCo的答案创建了一个脚本cat_and_follow,当不再打开该文件以进行写入时,该脚本也会终止。tail


2
我认为您正在寻找tail带有其Follow选项的命令。
keshlam

tail也可以使用二进制文件?
六。

2
您可能还会喜欢less +F...
mikeserv 2014年

我知道您找到了解决方案,但是我有一个问题,为什么不简单这样做:wget ... && tar xjvf ...
Joseph R.

@JosephR。,1.通过并行化节省时间;2.平衡系统负载(避免/减少资源密集型全油门拆箱阶段);3.为避免以后再记起“解压缩”命令(或安排它)或首先键入链接命令(当我不确定要解压缩它时),以避免这种情况。
六。

Answers:


22
tail +1f file

下载时,我在LibreOffice源tarball上的Ubuntu上对其进行了测试wget

tail +1f libreoffice-4.2.5.2.tar.xz | tar -tvJf -

它也可以在我的Android手机(tail +1 -f file与Busybox一起使用)中的Solaris 10,RHEL3,AIX 5和Busybox 1.22.1上运行。


1
下载完成后会自动退出吗?我希望“跟随者” /proc/*/fd/定期扫描并检查文件是否永久关闭。
六。

2
我没想到它tail可以用于binray文件...
Vi。

创建了一个脚本,该脚本可以扫描/proc/../fd并自动终止。
六。

1
您不需要GNU尾部,我相信该-f选项是标准的。但是,下载完成后它不会自动终止。
Barmar 2014年

4
在Ubuntu tail +1f中不起作用。您必须做tail -n +1
dangonfast

11

问题在于,cat它不知道该文件仍在附加中。一旦cat遇到文件的(当前)末尾,它就会退出。

wget为了避免这种情况,您必须对管道(或FIFO)进行写操作。

wget -O - http://... | tar -xjf -

7
curl,默认情况下输出到标准输出。并且(1)-f -是冗余的,tar默认情况下从stdin读取,并且(2)大多数tars可以自动检测压缩,因此j通常是不必要的。 curl http://... | tar x
2014年

2
这将下载而不保存解压缩的文件。如果网络故障,也将阻止继续下载。
六。

3
@Vi。您可以使用以下命令来保存文件teecurl http://… | tee ….tbz | tar -xj,但是恢复下载比再次调用同一命令要复杂得多。
kasperd 2014年

5

要从头开始阅读并跟踪文件,直到被打断:

tail -fn +1 file

为了证明这一点,请尝试以下操作(假设Bash与GNU Coreutils一起使用):

(while true; do printf . >> /tmp/file; sleep 1; done)&
tail -fn +1 /tmp/file  # (Ctrl-C to interrupt, of course, or otherwise kill it.)
kill %  # Kills the while-loop.

(注意:+1f至少在GNU tail命令中,其他人提到的内容被解释为文件名。)

以上适用于单个文件。如果不挂起第一个文件,则多个文件的串联将无法确定性地跟随所有文件。要“ 跟踪并跟踪 ”,只需跟随最后一个文件,就可以使用进程替换。这是另一个演示:

printf file1 > /tmp/file1; printf file2 > /tmp/file2
(while true; do printf . | tee -a /tmp/file{1,2} > /dev/null; sleep 1; done)&
cat /tmp/file1 <(tail -fn +1 /tmp/file2)  # (Interrupt or kill it.)
kill %  # Kills the while-loop.

这对我有用,tail +1f file但没有。
therealfarfetch

这个答案比tail +1f将其与其他选项结合使用时要好得多,例如--pid
Joseph K. Strauss
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.