我希望能够处理多种的文件wget -i
下载后立即下载(而不是等待列表中的所有文件完成 - 整个wget
过程退出)。问题是:因为wget
就地下载文件,所以我无法确定文件何时可以安全处理(完全下载)。理想情况下,原则方法是(我认为)wget
首先将文件下载到临时目录中,然后mv
在完成后将它们下载到实际的目标目录中。因为它mv
是原子的*,所以我可以保证目标目录中存在的任何文件都已完全下载并准备好进行处理。
我已经浏览了联机帮助页,但似乎找不到任何与此相关的内容。我目前的黑客方法是使用fuser
来查看wget
文件是否不再打开。但是,这是非常脆弱的(如果wget
多次打开文件怎么办?),我想避免它。
如果没有办法完全实现这一点,是否有一种解决方法可以达到相同的效果?如果相关的话,这些文件是 HTML 页面。
*附录:显然mv
可能不是原子的(尽管对于我的环境来说是这样),尽管我认为不需要严格的原子性。唯一的要求是,一旦文件被重命名到目标目录,它就会被完全下载(并且完整的内容在新路径中立即可用)。
编辑:将进程拆分为多个wget
命令也并不理想,因为它妨碍了使用某些核心功能wget
(速率限制、HTTP keepalive、DNS 缓存等)。
答案1
改用aria2c
:
aria2c --on-download-complete="/path/to/script" -i file
所以你的脚本可以是:
#!/bin/bash
notify-send "Finished: $3"
$1
是来自 aria2c 的 gid。$2
是文件的数量。$3
是文件名。