Diary over Finite Fields

515ひかるの日記と雑文

バックアップスクリプトを作りなおした。

バックアップスクリプトを作りなおしてみた。
コメントの英語が間違っているのととかは気にしない。

#!/usr/bin/env ruby
# coding: utf-8
require 'find'
require 'fileutils'
line_has_include = []
filebasename_includefiles = []
File.open(ARGV[0], 'r:utf-8') do |f|
  # if file has line include "\include", array will has the line
  f.each_line do |line|
    line_has_include.push(line) if line.include?('\\include')
  end
end

line_has_include.each do |line|
  line  =~ /\{(.+)\}/
  filebasename_includefiles.push($+)
end
# get texfile absolute path
abs_path = File.expand_path(ARGV[0])
abs_dir, file_basename = File.split(abs_path)
# get texfile name without ext
file_basename = File.basename(file_basename, '.*')
# unless /home/user/Desktop/doc directory exists, make now
base_dir = '/home/hikaru/Drive/'
FileUtils.mkdir_p(base_dir) unless FileTest.exist?(base_dir)
# set backup dir and unless backup_dir exists, make now
backup_dir = base_dir + file_basename
FileUtils.mkdir_p(backup_dir) unless FileTest.exist?(backup_dir)
# make pdf dir for preview pdf put
# find include files and copy
Find.find(abs_dir) do |f| # abs directory find files
  filebasename_includefiles.each do |include_base|
    if f.include?(include_base)
      f  =~ /(\.\/)/
      FileUtils.cp(f, backup_dir) if File.extname(f)  == '.tex'
      FileUtils.cp(f, backup_dir) if File.extname(f)  == '.aux'
    end
  end
  if f.include?(file_basename)
    #  extname is tex or pdf, copy for backup
    if File.extname(f)  == '.tex'
      FileUtils.cp(f, backup_dir)
    elsif File.extname(f)  == '.pdf'
      FileUtils.cp(f, backup_dir)
    # if extname is aux, move backupdir for backup
    elsif File.extname(f)  == '.aux'
      FileUtils.move(f, backup_dir)
    # delete other files
    elsif File.ftype(f) == 'file'
      File.delete(f)
    end
  end
end

簡単に言えば、やっていることは、

  1. .tex タイプセットするファイルの中身から \include と書かれている行を探す
  2. include されているファイルの名前を取得
  3. バックアップディレクトリがなければつくる
  4. \include ファイルがあれば、 バックアップディレクトリにバックアップをとる
  5. その他、 タイプセットで生じた .tex, .aux, .pdf はバックアップ
  6. その他の拡張子のファイルは削除

という感じ。

僕の場合はついでに GoogleDrive で共有させたかったのでバックアップディレクトリはDriveとの同期ディレクトリになっております。
個人的にはかなり満足している。