在纯 bash 中检查下载是否完成

jab*_*240 2 bash download firefox files

简短的故事是,我可能需要一个简单的 bash 循环,它会定期检查给定文件的大小自上次检查以来是否发生了变化。

长话短说,我将使用 Firefox下载文件my_file.txt。我想在下载完成后运行一个命令。Firefox 似乎没有提供我可以使用的 dbus 调用。存在一些具有上述功能的附加组件,但我需要一个相当可靠的解决方案。所以我想我可以运行一个 bash 脚本来定期检查my_file.txt的大小是否随着时间的推移而变化,或者已经稳定下来。该文件是一个大小 <=5mb 的文本文件,将在本地下载,因此它非常可靠并且下载应该线性运行(没有断开连接、服务器问题等)。

你能帮我写一个这么简单的bash脚本吗?探测文件的频率似乎确实是使事情有效工作的关键。就像我说的,它是一个 <=5mb 的文本文件,但可以小到 10kb,驻留在 SSD 驱动器上。

另外,也许有更好的方法来实现这一目标?就像我说的,我需要一个可靠的解决方案,它可以在 Linux 中以最少的依赖运行。也许是下载管理器?或者任何文件监控守护进程?或者为此提供文件系统API?或者使用访问时间而不是大小?

小智 5

假设唯一打开文件的是执行下载的程序,命令

/usr/sbin/lsof path/to/your/file | wc -l

如果文件仍然打开,则应返回 2,如果没有人打开,则应返回 0。

两个因为第一行是列标签列表,第二行是文件的状态行。

下载完成后,任何人都不应打开该文件。

您可以在民意调查中使用该结果。

您需要完整路径,lsof因为它通常是管理员命令,因此位于/usr/sbin. 它可能有只有超级用户才能使用的选项,但这不是其中之一。