wget(1) でファイルを送信する方法です。
想定しているのは
<input type='file' enctype='multipart/form-data'>
が指定されたフォームによるファイル送信処理です。
通常の http ヘッダ以外に Content-Type と boundary を wget(1) の --header オプションで指定し、multipart/form-data 形式に整形した送信するファイルの内容を --post-data オプションで、もしくは格納したファイルのファイル名を --post-file オプションで指定するだけで送信できます。
Content-Type は multipart/form-data、boundary は送信するデータの中に含まれない任意の文字列を指定すれば問題ない様です。
multipart/form-data 形式は以下の形式に整形します。
--任意の文字列
Content-Disposition: form-data; name="フォーム名"; filename="ファイル名"
Content-Type: text/plain
(空行)
ファイルの中身
(空行)
--任意の文字列
シェルスクリプトなどから利用する場合は関数にしてしまうのが良いと思います。
ファイルの中身が少ない場合はバウンダリ情報などを全てシェル変数に格納して --post-data オプションによる指定をする事も可能ですが、シェル変数にはセットできる文字数に制限があるのでファイルの中身が大きい場合全ての情報をファイルに出力して --post-file オプションによる指定をして転送する必要がああります。
#
# ファイルのアップロード処理
# $1: アップロードファイル
# $2-: URL 情報など
#
upload()
{
local _boundary _data
# バウンダリ文字列は日付時間を利用する
_boundary="boundary-`date '+%Y%m%d'`"
# 情報を格納するファイル
_data="${TMP:-/tmp}/_putifle.${1##*/}"
{
cat <<EOF
--${_boundary}
Content-Disposition: form-data; name="${element}"; filename="${2}.tgz"
Content-Type: application/octet-stream
EOF
cat ${1}
cat <<EOF
--${_boundary}
EOF
} > ${_data}
# ファイル名を shift
shift
wget "--header=\"Content-Type: multipart/form-data; boundary=${_boundary}\"\
--post-file=\"${_data}\"" ${*}
}
実際の処理ではエラーハンドリングなどが必要になると思いますので動作の骨子のみとなりますが、これで無事に転送できると思います。