0

次のcronタスクを使用しています:

wget -O ~/files/csv_backups/products_csv/products-`date +%Y-%m-%d-%H%M%S`.csv http://[site_URL]/product-report/csv

毎日の商品売上の CSV を取得します。現在、サーバーのファイル ディレクトリに配置し、日付スタンプを付けて名前を付けています。

私が探しているのは、ファイルへの添付ファイルまたは本文のファイルへのリンクを特定のメールアドレスに送信することです。これを行う方法が見つからないようです。何かご意見は?

更新

提案されたコードを試してみましたが、適切なダウンロード リンクではなく、ファイルへの末尾のパスを出力しただけです。だから私は次のことを試しました

echo "<a href="http://www.example.com' . $(ls -1t ~/files/csv_backups/products_csv/* | head -1) . '">Download File</a>" | mail -s "Daily Products CSV Report" username@mail.com

しかし、エコーはプレーンテキストで印刷されます。クローザー..

更新

1) OK...私の最初の問題は、ファイルの名前を変更しようとしているタイムスタンプが機能せず、ダウンロードが失敗することです。そのため、タイムスタンプを削除しました(バックアップを作成できるようにしたいのですが...)。次のコードは、ファイルをダウンロードするために使用している新しい行です。サーバーのタイムスタンプに関係なく、常に新しいコピーをダウンロードする必要があります。これは、その URL にアクセスするまでファイルが実際にはまったく生成されず、wget がダウンロードを試みる前に時間を比較するファイルがないためです。

wget --timestamping -r -O files/csv_backups/products_csv/products.csv http://www.example.com/reports/product-report/csv

2) 電子メールについては、html を削除して以下を残しました。何らかの理由で、エコーが html をプレーンテキストでレンダリングしていたため、機能しませんでした。なぜそれが起こっているのかは、URLの最後にある$(ls -1t * | head -1)行を使用して最新のファイルを取得できなかった理由かもしれません...

echo "http://www.example.com/files/csv_backups/products_csv/products.csv" | mail...
4

2 に答える 2

1

インストールしていない場合はmutt、次のようなことができます。

echo "$(ls -1t ~/files/csv_backups/products_csv/* | head -1)" | 
mail -s "subject line" email@address.com

これにより、件名のファイルへのパスが提供されます

全体echo $(ls -1t ~/files/csv_backups/products_csv/* | head -1)は、日付スタンプではなくタイムスタンプを追加しているため、ファイル名がわからないためです。は%H%M%S、時分秒もファイル名に追加します。

上記のコマンドでは、そのディレクトリ内の最新のファイルが最近ダウンロードされたものであると想定しています。

uuencodeまたは、の一部である which を使用することもできますGNU sharutils

uuencode $(ls -1t ~/files/csv_backups/products_csv/* | head -1) $(ls -1t ~/files/csv_backups/products_csv/* | head -1) | 
mail -s "subject line" email@address.com
于 2013-07-08T17:58:54.527 に答える
1

Heiner Steven は [電子メールでファイルを送信するためのスクリプトを書く]( http://www.shelldorado.com/articles/mailattachments.html ) について良い記事を書きました。彼はまた、パッケージsendfileを使用するものも書きました (上記のリンクで入手可能)。metamail

もう 1 つのアプローチは、perl;-) (man perlfaq9電子メールをカバーする) を使用するか、uuencode.

 uuencode Sales.cvs Sales.cvs | mail -s "Kaching"  listofmanagers@widgetsinc.com

注: のすべてのバージョンでuuencodeは、添付ファイルの名前を 2 回指定する必要があると思います。1 回目はファイルをエンコードするためです。もう 1 つは、メッセージから抽出するファイルの名前です。 一部の BSD システムでは のようにuuencode表示される場合もあります。スイッチを使用してb64encodeBase64 エンコードできます。uuencode-m

于 2013-07-08T18:47:17.480 に答える