BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

Bashスクリプトを使用して、AWSS3バケットからのファイルのダウンロードと表示を管理する方法

この記事で読むことができるように、私は最近、私の電子メールサーバーに問題があり、電子メール管理をAmazonのSimple Email Service(SES)にアウトソーシングすることにしました。

そのソリューションの問題は、SESに新しいメッセージをS3バケットに保存させ、AWSマネジメントコンソールを使用してS3バケット内のファイルを読み取ると非常に速く古くなることでした。

そこで、新しいメッセージのダウンロード、適切な保存、表示のプロセスを自動化するBashスクリプトを作成することにしました。

このスクリプトをUbuntuLinuxデスクトップで使用するために作成しましたが、Windows SubSystem forLinuxを介してmacOSまたはWindows10システムで動作させるために、それほど手間をかける必要はありません。

これが完全なスクリプトです。少し時間を取って確認した後、一度に1ステップずつ説明します。

#!/bin/bash
# Retrieve new messages from S3 and save to tmpemails/ directory:
aws s3 cp \
   --recursive \
   s3://bucket-name/ \
   /home/david/s3-emails/tmpemails/  \
   --profile myaccount

# Set location variables:
tmp_file_location=/home/david/s3-emails/tmpemails/*
base_location=/home/david/s3-emails/emails/

# Create new directory to store today's messages:
today=$(date +"%m_%d_%Y")
[[ -d ${base_location}/"$today" ]] || mkdir ${base_location}/"$today"

# Give the message files readable names:
for FILE in $tmp_file_location
do
   mv $FILE ${base_location}/${today}/email$(rand)
done

# Open new files in Gedit:
for NEWFILE in ${base_location}/${today}/*
do
   gedit $NEWFILE
done

まず、S3バケットに現在存在するメッセージをダウンロードする単一のコマンドから始めます(ちなみに、プライバシーを保護するために、バケットの名前とその他のファイルシステムおよび認証の詳細を変更しました)。

aws s3 cp \
   --recursive \
   s3://bucket-name/ \
   /home/david/s3-emails/tmpemails/  \
   --profile myaccount

もちろん、これは、ローカルシステム用にAWSCLIをすでにインストールして設定している場合にのみ機能します。まだ行っていない場合は、今がそれを行うときです。

cp コマンドは「コピー」の略で、-recursive CLIに、複数のオブジェクトにも操作を適用するように指示します。 s3://bucket-name バケットを指し(バケット名は明らかに異なります)、/ home / david ...行は、メッセージのコピー先の絶対ファイルシステムアドレスであり、-profile 引数は、CLIに複数のAWSアカウントのどれを参照しているかを示します。

次のセクションでは、スクリプトの残りの部分でファイルシステムの場所を指定するのがはるかに簡単になる2つの変数を設定します。

tmp_file_location=/home/david/s3-emails/tmpemails/*
base_location=/home/david/s3-emails/emails/

tmp_file_locationの値がどのようになっているのかに注意してください 変数はアスタリスクで終わります。これは、内のファイルを参照したいためです。 ディレクトリ自体ではなく、そのディレクトリ。

... / emails /階層内に新しい永続ディレクトリを作成して、後でメッセージを見つけやすくします。この新しいディレクトリの名前が現在の日付になります。

today=$(date +"%m_%d_%Y")
[[ -d ${base_location}/"$today" ]] || mkdir ${base_location}/"$today"

まず、今日という名前の新しいシェル変数を作成します date + "%m_%d_%Y"の出力によって入力されます 指図。 日付 それ自体が完全な日付/タイムスタンプを出力しますが、それに続くもの( "%m_%d_%Y" )その出力をよりシンプルで読みやすい形式に編集します。

次に、その名前を直接使用して存在するかどうかをテストします。これは、その日にすでにメールを受信して​​いるため、ディレクトリを再作成する必要がないことを示しています。そのようなディレクトリがない場合 存在する(||)、次に mkdir 私のためにそれを作成します。このテストを実行しないと、コマンドが迷惑なエラーメッセージを返す可能性があります。

Amazon SESは、S3バケットにドロップする各メッセージに醜くて判読できない名前を付けるので、動的に名前を変更すると同時に、新しいホーム(作成した日付のディレクトリ内)に移動します。 。

for FILE in $tmp_file_location
do
   mv $FILE ${base_location}/${today}/email$(rand)
done

for ... do ... done ループは、 $ tmp_file_locationで表されるディレクトリ内の各ファイルを読み取ります 変数を作成してから、作成したディレクトリ( $ base_location で表されます)に移動します。 $今日の現在の値に加えて変数 )。

同じ操作の一部として、新しい名前、文字列「 email 」を付けます "の後にランドによって生成された乱数が続きます 指図。乱数ジェネレーターをインストールする必要がある場合があります。これはaptinstall randになります。 Ubuntuで。

以前のバージョンのスクリプトでは、 count =1 ... count =$((count + 1))を使用してインクリメントされた短い連続番号で区別される名前が作成されていました。 for内のロジック ループ。同じ日に複数のメッセージのバッチを受信しなかった限り、これは問題なく機能しました。もしそうなら、新しいメッセージはその日のディレクトリにある古いファイルを上書きします。

私のランドは数学的に可能だと思います コマンドは重複する番号を2つのファイルに割り当てることができますが、デフォルトの範囲 rand 使用量は1〜32,576であり、これは私が喜んで取るリスクです。

この時点で、送信された新しいメッセージごとに、email3039、email25343などの名前のファイルが新しいディレクトリにあるはずです。

ツリーの実行 自分のシステムでコマンドを実行すると、5つのメッセージが02_27_2020ディレクトリに保存され、もう1つが02_28_2020に保存されたことがわかります(これらのファイルは古いバージョンのスクリプトを使用して生成されたため、順番に番号が付けられています)。

現在、tmpemails-にはファイルがありません これは、mvコマンドがファイルを新しい場所に移動し、何も残さないためです。

$ tree
.
├── emails
│   ├── 02_27_2020
│   │   ├── email1
│   │   ├── email2
│   │   ├── email3
│   │   ├── email4
│   │   ├── email5
│   └── 02_28_2020
│       └── email1
└── tmpemails

スクリプトの最後のセクションでは、お気に入りのデスクトップテキストエディター(Gedit)で新しいメッセージを開きます。同様のfor... do ... doneを使用します ループします。今回は、新しいディレクトリ内の各ファイルの名前を読み取ります(「今日」を使用して参照) "コマンド)そしてGeditでファイルを開きます。ディレクトリの場所の最後に追加したアスタリスクに注意してください。

for NEWFILE in ${base_location}/${today}/*
do
   gedit $NEWFILE
done

やるべきことがまだもう1つあります。 S3バケットをクリーンアップしないと、スクリプトを実行するたびに、蓄積されたすべてのメッセージがダウンロードされます。そのため、管理が次第に難しくなります。

したがって、新しいメッセージを正常にダウンロードした後、この短いスクリプトを実行して、バケット内のすべてのファイルを削除します。

#!/bin/bash
# Delete all existing emails 

aws s3 rm --recursive s3://bucket-name/ --profile myaccount

  1. Windows でオフライン マップを使用および管理する方法

    マップ (以前は Windows マップと呼ばれていました) は、人気のある Google マップに対する Microsoft の答えであり、マップから経路を取得するもう 1 つの方法です。しかし、常にオンラインであるとは限りません。 この事実を念頭に置いて、Microsoft はオフライン マップを提供し、ライブのインターネット接続を必要とせずに場所にアクセスできるようにしました。それでは、Windows でオフライン マップを使用および管理する最良の方法を学びましょう。 Windows でオフライン マップを使用および管理する方法 Windows でオフライン マップを最大限に活用する

  2. AWS を使用してビデオ ファイルを変換する方法

    ビデオの操作は時間のかかるプロセスです。ビデオ編集をしたことがある人なら誰でも、ビデオをさまざまな適切な形式に変換する際に直面する必要がある難易度を知っているので、完了したらさまざまなプラットフォームで表示できます。 組織は現在、これまで以上に多くのビデオ プロジェクトを作成しているため、変換に伴う問題を認識しています。ありがたいことに、アマゾン ウェブ サービス (AWS) というこの問題の解決策があります。 アマゾン ウェブ サービス (AWS) は、動画をクラウドにアップロードし、動画を目的の形式に変換するのに役立ちます。クラウドベースの変換の最も良い点は、システムからワークロードを