ssh 等を通したファイルのコピーは不可
その環境からインターネット接続は不可
だけどそこにファイル持っていきたい
ファイルを zip にまとめて base64 文字列で複数回に分けて貼り付けてから Linux 環境で復元する
PHP や Node.js は入れられないけど Python はデフォルトで入ってるので使える
Python のコードは文字列なのでプログラム自体を持っていくのも問題なくできる
そのときの復元用コード
import argparse
import base64
from pathlib import Path
parser = argparse.ArgumentParser()
parser.add_argument("directory")
parser.add_argument("output")
args = parser.parse_args()
directory = Path(args.directory)
files = list(directory.glob("*.part"))
files = sorted(files, key=lambda x: x.name)
if len(files) == 0:
print("対象のファイルが見つかりません")
exit(1)
else:
print("対象ファイル:")
print([file.name for file in files])
b64str = ""
for file in files:
b64str += file.read_text()
result = base64.b64decode(b64str)
with open(args.output, "wb") as f:
f.write(result)
print("完了しました")
適当なフォルダ (dir1) に 01.part, 02.part, ... のようにファイルを作って 次のコマンドを実行
python3 b64restore.py dir1 output.zip
dir1 の中の .part のファイルをソートして結合して base64 デコードして output.zip に出力
考えてみると 全体をメモリに一旦乗せるならファイルに保存する必要ないし 標準入力に貼り付けるようにしました
import sys
import base64
text = sys.stdin.read()
result = base64.b64decode(text)
sys.stdout.buffer.write(result)
python3 b64restore.py > data.zip
Base64 文字列を全部貼り付けたら Ctrl-D で EOF を送って終了させます