ローカルからS3にシンボリックリンクを除いてアップロードする方法

AWS, S3

1.概要

オンプレ版画像サーバの移行に伴い、NASに配置された200万以上のファイルを
S3にアップロードする必要がありました。
ただ、至るところに同じディレクトリのシンボリックリンクが設定されているため、
CLIの「aws s3 sync」を利用すると、不要なシンボリックリンクのファイルもアップロードしてしまいました。

そのため、シンボリックリンク配下のファイルを除いて、S3へアップロードする方法を検討しましたので、
それを明記します。

2.実行コマンド

以下のコマンドを利用します。

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の運用と改善を担当しています。主にプロジェクト管理をやっています。エンジニアリングは、趣味レベルですが、気づきがあったことなどを更新していきます。

AWS, S3