Bash

wget -i 通知每個文件何時完成(用於處理目的)

  • May 15, 2019

我希望能夠在下載後立即處理下載的多個文件wget -i(而不是等待列表中的所有文件完成 - 整個wget過程退出)。問題是:因為wget下載文件到位,我無法確定文件何時可以安全處理(完全下載)。理想情況下,原則方法是(我相信)wget首先將文件下載到臨時目錄中,然後mv在完成後將它們下載到實際的目標目錄中。因為它mv是原子的*,所以我可以保證目標目錄中存在的任何文件都已完全下載並準備好進行處理。

我已經瀏覽了手冊頁,但似乎找不到任何東西。我目前的 hacky 方法是用來fuser查看wget文件是否不再打開。但是,這非常脆弱(如果wget多次打開一個文件怎麼辦?),我想避免它。

如果沒有辦法準確地實現這一點,是否有可以達到相同效果的解決方法?如果這完全相關,這些文件就是 HTML 頁面。

*附錄:顯然mv可能不是原子的(儘管對於我的環境來說它是),儘管我認為不需要嚴格的原子性。唯一的要求是,一旦文件被重命名到目標目錄,它就會被完全下載(並且完整的內容會立即在新路徑中可用)。

編輯:將程序拆分為多個wget命令也不理想,因為它排除了使用wget(速率限制、HTTP keepalive、DNS 記憶體等)的一些核心功能。

改用aria2c

aria2c --on-download-complete="/path/to/script" -i file

所以你的腳本可以是:

#!/bin/bash
notify-send "Finished: $3"
  • $1是來自 aria2c 的 gid。
  • $2是文件的數量。
  • $3是文件名。

引用自:https://unix.stackexchange.com/questions/519091