ファイルをBase64にするスクリプト
なんでもはてな記法でシンタックスハイライトができるらしいので、試しにBase64スクリプトを貼り付けてみる
Ruby版
#!ruby def encode(file) data = [] data << file.read return data.pack('m') end def decode(str, file = nil) data = str.unpack('m')[0] if file != nil file.write(data) else return data end end def usage $stderr.printf("USAGE: %s [OPTIONS] <source file> [<output file>]\n\n", __FILE__) $stderr.printf("OPTIONS:\n") $stderr.printf("\t-p,--pack\t\tBase64でエンコードします\n") $stderr.printf("\t-u,--unpack\t\tBase64でデコードします\n") $stderr.printf("\t<source file>\t\t入力ファイル (必須)\n") $stderr.printf("\t<output file>\t\t出力ファイル。指定されない場合は標準出力\n") end if __FILE__ == $0 packMode = false unpackMode = false sourceFile = nil targetFile = nil ARGV.each do |arg| case arg when '-p', '--pack' packMode = true unpackMode = false when '-u', '--unpack' packMode = false unpackMode = true else if sourceFile == nil sourceFile = arg else targetFile = arg end end end if sourceFile == nil usage elsif !packMode && !unpackMode usage else open(sourceFile, 'rb') do |file| if packMode if targetFile != nil open(targetFile, 'wb') do |out| out.write(encode(file)) end else $stdout.write(encode(file)) end elsif unpackMode packedData = file.read if targetFile != nil open(targetFile, 'wb') do |out| decode(packedData, out) end else decode(packedData, $stdout) end end end end end
Python版
#!python from __future__ import with_statement import sys import codecs import base64 def usage(): sys.stderr.write('USAGE: %s OPTIONS <source file> [<output file>]\n\n' % (sys.argv[0])) sys.stderr.write('OPTIONS:\n') sys.stderr.write(u'\t-p,--pack\t\tBase64でエンコードします\n'.encode(sys.stderr.encoding)) sys.stderr.write(u'\t-u,--unpack\t\tBase64でデコードします\n'.encode(sys.stderr.encoding)) sys.stderr.write(u'\t<source file>\t\t入力ファイル (必須)\n'.encode(sys.stderr.encoding)) sys.stderr.write(u'\t<output file>\t\t出力ファイル。指定されない場合は標準出力\n'.encode(sys.stderr.encoding)) if __name__ == '__main__': packMode = False unpackMode = False sourceFile = None outputFile = None args = sys.argv[1:] for arg in args: if arg == '-p' or arg == '--pack': packMode = True elif arg == '-u' or arg == '--unpack': unpackMode = True else: if sourceFile is None: sourceFile = arg else: outputFile = arg if not packMode and not unpackMode: usage() elif sourceFile is None: usage() else: with file(sourceFile, 'rb') as input: if outputFile is None: if packMode: base64.encode(input, sys.stdout) elif unpackMode: base64.decode(input, sys.stdout) else: with file(outputFile, 'wb') as out: if packMode: base64.encode(input, out) elif unpackMode: base64.decode(input, out)