0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

気軽なファイルバックアップツールの勧め

Posted at

QTTabBarの機能

エクスプローラをタブ化するエクスプローラー拡張であるQTTabBarを私は使っているんだが、これには以下の機能がある。

選択しているファイルを引数に加えて、登録したコマンドをボタンを押すだけで実行できる

この機能(アプリケーションランチャー)を使い、下記のbackup.pyを実行するように設定すると、ファイルを簡単にバックアップできるようになります。
ファイルを修正する時に、とりあえず今のファイルを残しておこうとかをすぐにやるようになるのでお勧めです。

他のエクスプローラー拡張やファイラーでも同様の機能があれば、同じようにすれば便利です。

backup.py

機能

  • ファイルのコピーを作る。
  • その際に作成日時は変更せず。
  • コピー先のファイル名は、元のファイル名に「-backupYYYYMMDD」の形で、元ファイルの更新日時を含んだものとする。
  • 同じ日にちの更新日時のものが複数になる場合は、「(1)」などと連番を付加する。
  • 拡張子は元ファイルと同じまま。

コード

backup.py
# -*- coding: utf-8 -*-
import sys
import re

def fext(fname):
    """
      split file name to base name part and extension part
    """
    pat = re.compile('(\.[^.]*)$')
    res = pat.search(fname)
    return(fname[0:res.start()], res.group(1))


def cp(inp,out):
    """
      File copy
    """
    import shutil
    
    if False: # debug
        print(inp,' --> ', out)
    else:
        shutil.copyfile(inp,out)
        shutil.copystat(inp,out)


def backup(inp,ntry=10):
    """
      File backup copy
    """
    import os
    import os.path
    import time
    m = os.stat(inp)
    dstr = time.strftime('%Y%m%d', time.localtime(m.st_mtime))
    (base,ext) = fext(inp)
    out = base + '-backup' + dstr + ext
    i = 0
    while os.path.exists(out):
        i += 1
        if i > ntry:
            print("I am tired because I did many try!", file=sys.stderr)
            exit(1)
        else:
            out = base + '-backup' + dstr + '(' + str(i) + ')' + ext

    cp(inp,out)

# Main
if __name__ == "__main__":
    import argparse
    
    parser = argparse.ArgumentParser(prog='backup.py')
    parser.add_argument('-n', '--ntry',
                        help='Number of Max. try',
                        nargs='?', type=int,
                        default=10)
    parser.add_argument('file', nargs='+')
    args = parser.parse_args()
    
    for f in args.file:
        backup(inp=f,ntry=args.ntry)
0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?