LoginSignup
0
4

More than 1 year has passed since last update.

Githubをただのバックアップストレージとして使うバッチファイル【悪用厳禁】(Windows)

Posted at

きっかけ

こちらの記事を読んで自分でもやってみたくなった。
記事ではNode.jsを用いてスクリプトを作られているが、バッチファイルでもできそうだなーと思ったので、今回はバッチでやってみた。

Githubの仕様

100MB以上のファイルはプッシュできないらしい。検証すると50MB以上のファイルでも警告が出た。

作ったもの

今回作ったバッチは二つ。
①ファイルをバイナリ単位で分割してgit pushするバッチファイル(push.bat)
ファイルの容量が50MBでも警告が出たので、とりあえず40MBごとに分割するようにした。
分割されたファイルの部分たちは「target」ディレクトリ内の「ファイル名_File」というディレクトリに格納されてpushされることになる。

②分割されたファイルを結合するバッチファイル(connect.bat)
先ほどの①の逆の動作をするバッチファイル。git cloneの機能は面倒だったので省いた。
「ファイル名_File」ディレクトリ内のファイルを結合する。

コード

push.bat
mkdir target
for %%i in (*) do (
copy %%i .\target
)
cd .\target
for %%i in (*) do (
split -b 41943040 %%i %%i.copy.
mkdir %%i_File
for %%j in (%%i.copy.*) do (
move %%j .\%%i_File
)
del %%i
)
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin %1
git push -u origin main
connect.bat
setlocal enabledelayedexpansion

for /d %%i in (*_File) do (
set dirname= %%i
cd !dirname!
copy /b * !dirname:~0,-5!
move !dirname:~0,-5! ..\
cd ..\
rd /s /q !dirname!
)

やってることは超単純。

使い方

push.bat
①githubで適当にリポジトリを作る。
ここは理解している前提。URLも取得しておく
②適当にディレクトリを作る。
ディレクトリ内のすべてのファイルを分割してpushする仕様なので、例えばデスクトップで実行しないよう注意。
③コマンドプロンプトを起動して、②のディレクトリに移動する
④分割&pushしたいファイルをすべて②のディレクトリにコピーする。
仕様上、ディレクトリの分割は不可であり、ファイルの分割&pushしか対応していない。
ファイルだけ移動させること。再帰的なコードを書けばいいんだけど、めんどくさかったー。
⑤第二引数に①で取得したURLを指定して、push.batを実行する。
うまくいけばgit pushされるはず

connect.bat
①git cloneでバックアップしたデータを取得する
②ディレクトリに移動し、connect.batを実行する

注意。最後に言うのもなんだけど

・先ほども言ったが、ディレクトリの分割&pushには対応していない。ファイルならいくつ並べてもいいけどディレクトリは不可。
例えば写真をアップロードしたいならpush.batを実行するディレクトリにそのままドラッグ&ドロップしてほしい。
・規約違反ではないらしいけど、ぶっちゃけモラル的によくない使い方。やるなら自己責任で。やらないほうが良いかも。
ていうか、そもそも実用性はほぼない。あくまで実験である。

気が向いたらディレクトリのpushにも対応したバージョンを書こうと思います。

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4