使用 wget 中下載文件的數量作為 bash 腳本中的變數
我可以獲取下載文件的數量
wget -r
並將其用作變數嗎?我想編寫一個在其中執行多個 wget 命令的腳本(使用 -q 以便我可以控制輸出),然後最後將下載文件的數量相加並將其回顯給使用者。這可能嗎?
要在 Jed 的建議的基礎上繼續下去,您可以執行以下操作:
MY_VARIABLE=$(wget -r http://foo 2>&1 | grep -c 'saved')
或者,如果您想更複雜,但更可靠和健壯,您可以提取 wget 作為摘要給出的下載計數:
MY_VARIABLE=$(wget -r -nv http://foo 2>&1 | awk '/^Downloaded:/ {print $2}')
**更新:**關於
2>&1
構造,對於 *nix 應用程序,有兩個預設輸出流,stdout
(文件描述符 1)和stderr
(文件描述符 2)。對於互動式命令,兩者通常都發送到螢幕/終端,因此很難區分它們。告訴您的2>&1
bash 將發送到stderr
(fd 2) 的輸出與 (fd 1) 的輸出結合起來stdout
。結果是單個輸出流,它將查看管道中的下一個工具(如上),就像輸出查看螢幕一樣。這是必需的,因為 wget 預設將其狀態資訊發送到
stderr
,而不是stdout
。如果您在沒有重定向的情況下執行上述stderr
內容,那麼您將發送stdout
到管道程序,但僅此而已。您會將 wget 的所有輸出發送到您的螢幕 (stderr
),並且該變數將為空,因為grep
orawk
語句正在處理stdout
(沒有輸出)。要查看應用程序發送的內容,您可以執行以下操作:
wget -r -nv http://foo 2>foo.err 1>foo.out
要不就:
wget -r -nv http://foo 2>foo.err >foo.out
如果您不指定輸出重定向的數字,則預設為
stdout
.文件
foo.err
和將分別包含您的命令以和foo.out
結尾的內容。stderr``stdout
另外值得注意的是,您還可以使用
|&
管道命令stderr
與stdout
, 作為 . 的簡寫2>&1
。有關命令重定向和
stdin
、、stdout
和的更多資訊,請參見 bash 手冊頁、stdin、stdout 和 stderr 手冊頁,以及由於和stderr
背後的歷史原因,請參見以下文章:http: //jstorimer.com/2011 /12/29/the-difference-between-stdout-and-stderr.htmlstdout``stderr