Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2914

ローカルのファイルをフォルダごとリモートサーバーへアップロードするピュアなShellスクリプト

$
0
0
静的ファイルホスティングサービスにXSERVERを使っているのですが、 ローカルPCで作成した本番用ファイルをアップロードする際に 一個ずつアップロードするのが面倒だったので、 Shellで一括アップロードするスクリプトを作りました。 環境 ローカルPC OS:Windows 10 リモートサーバー:XSERVER 事前準備 以下の秘密鍵を作成し、ダウンロードしておく。 → XSERVERでSSH接続するための設定手順(公式サイト) スクリプト UPLOAD_FILES_TO_XSERVER.sh SCRIPT_DIR=$(cd $(dirname $0); pwd) # スクリプトが配置されているディレクトリを設定 # XSERVERへのログインパスワードをクリップボードにコピー # SET /P <NUL="<パスワード>" | clip <※1パスワードをコピーするbatchファイルへのパス>.bat # パスワードをコピーするbatchファイルへのパス echo "パスワードをクリップボードにコピーしました。" # 定数定義 KEY_PATH=<秘密鍵パス> # 秘密鍵パス(事前準備で保管した鍵へのパス) PORT=<ポート番号> # ポート番号 COPY_FROM=$SCRIPT_DIR/out/* # コピー対象ファイル 今回はout/*にあるファイルをコピー対象とする USER_NAME=xs<ユーザー名> # ユーザー名 HOST_NAME=<ホスト名>.xserver.jp # ホスト名 REMOTE_ROOT_DIR=$USER_NAME@$HOST_NAME:/home/$USER_NAME/ #リモートパス(どんな命名が良いか思いつかなかったので、適当に付けました。) PROJECT_DIR=<ドメイン名>/public_html/(<サブドメイン名>)/(<サブフォルダ名>)/ # アップロードフォルダまでのパス # 例)PROJECT_DIR=paths-are.com/public_html/works.paths-are.com/jamstackblog-with-next-muiv5-microcms/ COPY_TO=$REMOTE_ROOT_DIR$PROJECT_DIR # コピー先 # コピー先のファイルを全て削除(前回のデータなどのごみデータを削除する。) echo "コピー先 $COPY_TO 配下のファイルを全て削除します。パスワードを入力してください。" ssh -i $KEY_PATH -l $USER_NAME -p $PORT $USER_NAME.xsrv.jp "rm -r $PROJECT_DIR*" #コピー先のフォルダ配下のファイルを削除 # 一括アップロード echo "$COPY_FROM のファイルを $COPY_TO へアップロードします。パスワードを入力してください。" scp -i $KEY_PATH -r -P $PORT $COPY_FROM $COPY_TO read -p "Press [Enter] key to resume." 上記スクリプトをご自身のルートプロジェクト直下に配置してください。 そして、<>の中を自分の環境に合わせて設定してください。 コピー対象ファイルは今回は「ルート/out/*」に設定していますので、自由に変えてください。私はNext.jsの静的htmlファイルをXSERVERにアップロードする想定でこのスクリプトを書きました。 <※1パスワードをコピーするbatchファイルへのパス> とありますが、これは SET /P <NUL="<パスワード>" | clip というコードが記載されたbatchファイルを用意します。 copy_pass.bat SET /P <NUL="<パスワード>" | clip パスワードは事前準備時の鍵を作成時に設定したパスワード値に置き換えてください。 このbatchファイルを実行すると<パスワード>の文字列がクリップボードにコピーされるようになります。ちょっとした便利テクです。 実行 実行します。 実行.sh bash UPLOADFILES_TO_XSERVER.sh こんな感じのログが出力されるはずです。 bash UPLOADFILES_TO_XSERVER.sh dir> SET /P ="<パスワード>" 0<NUL | clip コピー先 <コピー先パス> 配下のファイルを全て削除します 。パスワードを入力してください。 Enter passphrase for key '<秘密鍵パス>': <コピー対象> のファイルを <コピー先パス> へアップロードします。パスワードを入力してください。 Enter passphrase for key '<秘密鍵パス>': aeziyoec49v.json 100% 1769 29.9KB/s 00:00 ls6ubzxne_4.json 100% 2460 30.4KB/s 00:00 y2y-2m1migih.json 100% 2537 34.5KB/s 00:00 business.json 100% 1794 23.4KB/s 00:00 culture.json 100% 62 1.0KB/s 00:00 design.json 100% 61 1.2KB/s 00:00 health.json 100% 61 1.2KB/s 00:00 opinion.json 100% 2484 49.2KB/s 00:00 politics.json 100% 63 1.2KB/s 00:00 science.json 100% 62 1.2KB/s 00:00 style.json 100% 60 0.9KB/s 00:00 technology.json 100% 1796 32.5KB/s 00:00 travel.json 100% 2560 31.8KB/s 00:00 index.json 100% 7904 108.7KB/s 00:00 777-3be30c059f107898767e.js 100% 65KB 338.4KB/s 00:00 framework-2191d16384373197bc0a.js 100% 128KB 330.6KB/s 00:00 main-f697fe405f9bcb3ffaff.js 100% 74KB 241.6KB/s 00:00 404-ff821282b85737b4b90b.js 100% 513 3.6KB/s 00:00 [id]-d15bed3392fddeca4750.js 100% 6688 81.3KB/s 00:00 [categoryId]-df6dd1caea01dfee2716.js 100% 7726 96.3KB/s 00:00 index-55a40d819e141f7366e4.js 100% 7733 81.6KB/s 00:00 _app-8aa3da5d09aa38ac3826.js 100% 38KB 312.1KB/s 00:00 _error-737a04e9a0da63c9d162.js 100% 267 6.5KB/s 00:00 polyfills-a54b4f32bdc1ef890ddd.js 100% 90KB 482.9KB/s 00:00 webpack-d5ec76dc671ff27c3b07.js 100% 1634 21.2KB/s 00:00 _buildManifest.js 100% 630 10.3KB/s 00:00 _ssgManifest.js 100% 146 2.4KB/s 00:00 index.html 100% 10KB 123.2KB/s 00:00 index.html 100% 32KB 299.1KB/s 00:00 index.html 100% 33KB 283.4KB/s 00:00 index.html 100% 33KB 296.6KB/s 00:00 index.html 100% 36KB 266.6KB/s 00:00 index.html 100% 30KB 228.7KB/s 00:00 index.html 100% 30KB 240.0KB/s 00:00 index.html 100% 30KB 251.8KB/s 00:00 index.html 100% 37KB 303.6KB/s 00:00 index.html 100% 30KB 200.7KB/s 00:00 index.html 100% 30KB 256.4KB/s 00:00 index.html 100% 30KB 160.7KB/s 00:00 index.html 100% 36KB 181.7KB/s 00:00 index.html 100% 37KB 241.7KB/s 00:00 index.html 100% 52KB 351.7KB/s 00:00 Press [Enter] key to resume. パスワードを入力するところでは、入力してください。 クリップボードにコピーする手順を踏んでいる方はそのままペーストして「Enter」すれば大丈夫です。 XSERVER管理画面から 「更新日時」を確認したところXSERVERへちゃんとアップロードできてることが確認できました。 おわり まあ、今はWinSCPなどのファイルアップロードソフトウェアや、Githubにプッシュしたら自動でサーバーへアップロードするCIとかがあるので、こんなレガシーなやり方する方はあまりいないかもしれませんが、一応こんなやり方もできますね。ということで自分用の備忘録でしたー!

Viewing all articles
Browse latest Browse all 2914

Trending Articles