Bash

使用 wget 中下載文件的數量作為 bash 腳本中的變數

  • March 29, 2012

我可以獲取下載文件的數量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>&1bash 將發送到stderr(fd 2) 的輸出與 (fd 1) 的輸出結合起來stdout。結果是單個輸出流,它將查看管道中的下一個工具(如上),就像輸出查看螢幕一樣。

這是必需的,因為 wget 預設將其狀態資訊發送到stderr,而不是stdout。如果您在沒有重定向的情況下執行上述stderr內容,那麼您將發送stdout到管道程序,但僅此而已。您會將 wget 的所有輸出發送到您的螢幕 ( stderr),並且該變數將為空,因為greporawk語句正在處理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

另外值得注意的是,您還可以使用|&管道命令stderrstdout, 作為 . 的簡寫2>&1

有關命令重定向和stdin、、stdout和的更多資訊,請參見 bash 手冊頁、stdin、stdout 和 stderr 手冊頁,以及由於和stderr背後的歷史原因,請參見以下文章:http: //jstorimer.com/2011 /12/29/the-difference-between-stdout-and-stderr.htmlstdout``stderr

引用自:https://serverfault.com/questions/374650