2016-12-28 119 views
2

這是我用來導出一些文件elasticsearch劇本,但沒有運氣無法發送大文件使用捲曲elasticsearch:參數過長

#!/bin/ksh 
set -v 
trap read debug 
date=$(date +%Y-%m-%d); 
echo $date; 
config_file="/home/p.sshanm/reports_elastic.cfg"; 
echo $config_file; 
URL="http://p-acqpes-app01.wirecard.sys:9200/reports-"$date""; 
echo $URL; 

find /transfers/documents/*/done/ -type f -name "ABC-Record*_${date}*.csv"| 
while IFS='' read -r -d '' filename 
do 
    echo "filename : ${filename}" 
    var=$(base64 "$filename"| perl -pe 's/\n//g'); 

    #if i use below it will fail as argument too long , so i used with curl option @ 
    # var1= $(curl -XPUT 'http://localhost:9200/reports-'$date'/document/reports?pipeline=attachment&pretty' -d' { "data" : "'$var'" }') 

    var1=$(curl -X PUT -H "Content-Type: application/json" -d @- "$URL" >>CURLDATA 
    { "data": "$var" } 
    CURL_DATA) 
done; 

如果我使用它下面的

var1= $(curl -XPUT 'http://localhost:9200/reports-'$date'/document/reports?pipeline=attachment&pretty' -d' { "data" : "'$var'" }') 

將如下失敗,所以我用捲曲選項@

說法太長時間使用

+0

你可以嘗試添加周圍'URL'雙引號作爲'捲曲-XPUT的 「http://本地主機:9200/$報告 - 日期/文件/報表管道=附件及漂亮」 -d「{「數據「: 」 ' 「是$ var」'「}'' – Inian

+0

捲曲:在/ usr/bin中/捲曲:不能執行[參數列表太長] – codebeginner

+0

使用'@'選項工作了什麼?使用它的任何問題? – Inian

回答

1

你的語法從stdin閱讀是錯誤的,here-doc string應該是(<<)和去限制器誤匹配使用CURL_DATA在這兩個地方。

curl -X PUT -H "Content-Type: application/json" -d @- "$URL" <<CURL_DATA 
{ "data": "$var" } 
CURL_DATA 
+0

它再次失敗。 'var1 = $(curl -X PUT -H「Content-Type:application/json」-d @ - 「$ URL」<< CURL_DATA {「data」:「$ var」} CURL_DATA) done;' ./reports.sh:第21行:第31行語法錯誤:'<<'不匹配 – codebeginner

+0

@codebeginner:您可以先嚐試而不將其放置在變量中嗎?請記住,在開始和結束時,限制器CURL_DATA之間不應有任何前導或尾隨空格 – Inian