1.概要
オンプレ版画像サーバの移行に伴い、NASに配置された200万以上のファイルを S3にアップロードする必要がありました。 ただ、至るところに同じディレクトリのシンボリックリンクが設定されているため、 CLIの「aws s3 sync」を利用すると、不要なシンボリックリンクのファイルもアップロードしてしまいました。
そのため、 シンボリックリンク配下のファイルを除いて、S3へアップロードする方法を検討しましたので、 それを明記します。
2.実行コマンド
以下のコマンドを利用します。
find ./ -type f | sed -e 's/^.\///' | xargs -L 1 -P 2 -Ilocalpath aws s3 cp localpath s3://xxxx-xxxx-xxxx-yyyyyyyyy-zz/test_dir/localpath
3.解説
各コマンドとオプションの解説は以下の通りです。
| コマンド/オプション | 解説 |
|---|---|
| find ./ -type f | 指定された(カレント)ディレクトリからファイルのみを検索する。 |
| sed -e ‘s/^.\///’ | findの検索結果の先頭に「.」が付与されているので削除する。 |
| xargs -L 1 -P 2 -Ilocalpath | sedコマンドの結果を次のコマンドに渡す。-lのあとの「localpath」は変数として定義する。 |
| aws s3 | CLIでS3サービスに関する手続き実行するコマンド。localpathからディレクトリ構成も含めてコピーすることが出来る。 |
4.補足事項
・xargsコマンド の-Pオプションはプロセス数となるので、並列処理が可能となる。 ・ただし、毎回S3との認証処理が実行されるため、性能が出ません。
山本 耕琢(コウタク)
レコチョクの楽曲情報の検索や、決済/会員情報、 レコメンド情報などを扱う、レコチョクAPIの運用と改善を担当しています。主にプロジェクト管理をやっています。技術力は低めですが、気づきがあったことなどを更新していきます。