GitHubから特定のディレクトリ配下のファイルをPowerShellワンライナーで一括ダウンロード

ちょっと作ったのでメモ。

取得したいもの

今回、ここにあるRedshiftのView定義用のSQLファイルを取得したいと思います。

https://github.com/awslabs/amazon-redshift-utils/tree/master/src/AdminViews

利用するGithub API

以下のContents APIを利用します。

developer.github.com

以下のルールでAPIのURL組み立てます。

GET https://api.github.com/repos/:owner/:repo/contents/:path

上記のリポジトリの場合は以下のURLになります。

https://api.github.com/repos/awslabs/amazon-redshift-utils/contents/src/AdminViews

ワンラインナー

ワンライナーと言っておきながらですが、APIのURL入れると長くなって読み難いので、変数入れます。

PS:> $url = "https://api.github.com/repos/awslabs/amazon-redshift-utils/contents/src/AdminViews"

後は以下を実行するだけです。

PS:> (Invoke-WebRequest -Uri $url).Content | ConvertFrom-Json | foreach{$_.download_url} | foreach{Invoke-WebRequest -Uri $_ -OutFile ([System.Web.HttpUtility]::UrlDecode(([System.Uri]$_).segments[-1],[Text.Encoding]::GetEncoding("utf-8")))}

取得できています。

PS: > ls

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019/07/18     13:42           3759 README.md
-a----       2019/07/18     13:42           1510 v_check_data_distribution.sql
-a----       2019/07/18     13:42            765 v_check_transaction_locks.sql
-a----       2019/07/18     13:42           1124 v_check_wlm_query_time.sql
--省略--
-a----       2019/07/18     13:42           2982 v_space_used_per_tbl.sql
-a----       2019/07/18     13:42           2610 v_vacuum_summary.sql
-a----       2019/07/18     13:42           1308 v_view_dependency.sql