# coding: utf-8 # # compress.rb # # cronとかいうので定期的にバックアップするのが普通。 # # * 2005-09-24 # 文字とか順番とか些細な変更。 add_conf_proc('compress', 'データのバックアップ'){ tar_path = '/usr/bin/tar'; target_dir = @conf.data_path; # 圧縮対象のフォルダ out_dir = "/home/vvvvvv/cgi_data/ds14050/diary/cache/backup"; # 圧縮ファイルを置くフォルダ out_url = nil; # 圧縮ファイルを置くフォルダの URL。out_dirが非公開の場合は nil。 error_message = ''; compressed_files = ''; byteformat = lambda{|size| size = size.to_f _ = %w(B KiB MiB GiB TiB).each{|unit| break "%d%s"%[size.ceil,unit] if size <= 999 size /= 1024 next } return _ || ("%dPiB" % size.ceil) } begin Dir.mkdir(out_dir) unless(FileTest.exist?(out_dir)); if(@cgi['compress'] == 'data') out_file = "#{File.basename(target_dir)}.#{Time.now.strftime('%Y%m%d')}.tar.gz"; command = %Q[#{tar_path} --create --gzip --file "#{File.join(out_dir, out_file)}" "#{target_dir}"]; out = %x[#{command}]; error_message << "

#{command}
returned #{$?.exitstatus}.

\n"; error_message << "
#{CGI.escapeHTML(out)}
\n"; end if(@cgi['del'] == 'all') Dir.chdir(out_dir){ File.delete( * Dir.glob("#{File.basename(target_dir)}.????????.tar.gz") ); } if(FileTest.directory?(out_dir)); elsif(@cgi['del'] =~ /^\d{8}$/) path = File.join(out_dir, "#{File.basename(target_dir)}.#{@cgi['del']}.tar.gz"); File.delete(path) if(FileTest.file?(path)); end Dir.chdir(out_dir){ compressed_files << "\n"; } if(FileTest.directory?(out_dir)) rescue Exception => e error_message << "

ERROR

"; error_message << "
#{CGI.escapeHTML(e.message)}\n#{CGI.escapeHTML(e.backtrace.join("\n"))}
\n"; end <<-"HTML"; #{error_message}

日記データを圧縮する

圧縮されたファイル一覧

#{compressed_files}

全ての圧縮ファイルを削除する

HTML }