2016-11-14 5 views
2

ファイルのリストをサーバーにアップロードしようとしています。これは私がcurl:(26)ファイルが変数のときにファイルを開くことができませんでした。

files=$(shopt -s nullglob dotglob; echo /media/USB/*) > /dev/null 2>&1 
if ((${#files} )) 
    then 
      for file in $files 
      do 
        echo "Filename" 
        echo $file 
        curl -i -X POST -F [email protected]$file 192.168.1.122:5000/upload 
      done 

基本的に私は、USBドライブ上のすべてのファイルを取り、自分のローカルサーバにアップロードしようとしていているスクリプトです。カールコマンドは私にトラブルを与えています。私はこれらのファイルを私がこのシステムにマウントするドライブに移動できますが、私はcurlコマンドでそれらを送ることができませんでした。他の関連する質問に基づいて@"$file"@\"$file\"のバリエーションを試しましたが、これを動作させることができませんでした。しかし、迷惑なことは、私がこれをするときです:

curl -i -X POST -F [email protected]/absolute/path/to/my/file.txt 192.168.1.122:5000/upload 

私は期待どおりに動作します。これを私のループで動かすにはどうすればいいですか?

+0

考慮すべき点の1つは、スクリプトの実行場所とファイルの場所の位置です。あなたがファイル名を取得する方法は、 "echo/media/USB/*"を通して行われます。これはファイル名を取得しますが絶対パスは取得しません。あなたのスクリプトは/ media/USBから走っていますか?そうでない場合、これが動作するように絶対パスを取得する必要があります。 –

+0

あなたが何かに乗っている可能性があります...スクリプトは "/ media/USB /"で実行されていませんが、ファイルパスをエコーすると絶対パスになります。 "/media/USB/filename.txt"は "$ file"ですが、テストしたところ、実際には "/ media/USB"というディレクトリに行き、コマンドを実行してファイルを入力しました。そこ。絶対パスでUNCパスを意味しますか? –

+0

/media/usb/filename.txt絶対パスとfilename.txtは相対パスです。 –

答えて

1

私は、誰かがこの問題を抱えている場合に私が共有する解決策を見つけ出しました。私は、これはそれを修正理由を正確にわからないが、私は単にcurlコマンドで[email protected]$fileの前後に引用符を入れていた:それはラインの下の誰かに役立つ場合には

curl -i -X POST -F "[email protected]$file" 192.168.1.122:5000/upload 

は、ここでこれを残して。

+0

また、私は '@ rudi'のようなものが彼のコメントでこれを言及していると思います –

+1

奇妙なことに、私は反対の状況を抱えていた:' /my_folder/*.jpgのファイル。 echo $ file;を実行します。 time curl -X POST http:// my_server/my_endpoint -F media = @ $ file; done'私はファイルを見るために引用符を削除しなければなりませんでした! – alisa

関連する問題