2015-04-02 73 views
-1

複雜的使用,我試圖讓使用基於某種模式捲曲2個文件,但似乎並沒有工作:
捲曲與模式

文件:
SystemOut_15.04.01_21.12.36.log
SystemOut_15.04.01_15.54.05.log

curl -f -k -u "login:password" https://myserver/cgi-bin/logviewer/index.cgi?getlogfile=SystemOut_15.04.01_21.12.36.log'&'server=qwerty123.com'&'numlines=100000000'&'appenv=MBL%20-%20PROD'&'directory=/app/WAS/was85/profiles/node/logs/mbl-server1 

我知道有-A關鍵,但它不工作,因爲我的文件是內部鏈接。
如何使用模式提取這2個文件?

+0

文件獲取是'getLogFile'查詢參數?你可以發送兩次該參數嗎?如果不是,我認爲你只是打電話兩次。 – 2015-04-02 19:55:03

+0

不幸的是我無法發送兩次參數。這只是2個日誌的例子,事實上我有很多這樣的日誌,所以我需要一些通用的解決方案來完成它們。 – Skyline 2015-04-02 19:56:45

+1

如果您的URL一次只能取一個日誌文件名,那麼您無法一次將它們全部取出。如果沒有其他查詢可以運行以便以某種方式獲取它們,那麼您可以循環查找名稱並自己多次運行'curl'。 – 2015-04-02 19:58:06

回答

0

自己做了。一個curl獲取網頁上的日誌列表。另一個下載這些文件。

代碼如下:

for file in $(curl -f -k -u "user:pwd" https://selfservice.pwj.com/cgi-bin/logviewer/index.cgi?listdirectory=/app/smx_client_mob/data/log'&'appenv=MBL%20-%20PROD'&'server=xshembl04pap.she.pwj.com | grep href | sed 's/.*href="//' | sed 's/".*//' | sed 's/javascript:getLog//g' | sed "s/['();]//g" | grep -i 'service' | grep '^[a-zA-Z].*'); do 
curl -o $file -f -k -u "user:pwd" https://selfservice.pwj.com/cgi-bin/logviewer/index.cgi?getlogfile="$file"'&'server=xshembl04pap.she.pwj.com'&'numlines=100000000'&'appenv=MBL%20-%20PROD'&'directory=/app/smx_client_mob/data/log; done 
+0

[DontReadLinesWithFor](http://mywiki.wooledge.org/DontReadLinesWithFor)並引用您的變量用法,但除此之外,這看起來至少可用(即'grep' /'sed'鏈是醜陋的,並且幾乎可以肯定地被清理掉。你也可以單獨引用URL中的* entire * non'「$ file」'位,而不需要引用&符號。 – 2015-04-02 23:08:41