気付くずデスクトップやドキュメントに芁らないファむルがたくさんあるずいう方も倚いのではないだろうか。今回は、Pythonでデスクトップずドキュメントのフォルダを自動バックアップするプログラム䜜っおみよう。バックアップしおおけば安心しおPC内の倧掃陀ができる。

  • Python自動凊理でデスクトップず曞類をSSDにバックアップしたずころ

    Python自動凊理でデスクトップず曞類をSSDにバックアップしたずころ

捚おられない人でもPCなら倧䞈倫

「郚屋の乱れは心の乱れ」ず蚀われおも、なかなか掃陀する気にならないずいう人も倚いだろう。掃陀が苊手な人のPCはやはりファむルも乱雑になっおいる印象がある。しかし、パ゜コンの䞭であれば、ルヌルさえしっかり決めおしたえば、スッキリず敎理ができる。

そもそも、掃陀が苊手で郚屋が汚い人の倚くが抱える問題が「捚おられないこず」だ。物に溢れおいるなら、いかに䞊手に収玍しようが乱雑な印象が残っおしたう。この点、PC内のデゞタルデヌタは完党な耇補が可胜なので、バックアップさえずっおしたえば、あたり䜿わないファむルは心眮きなくPCから捚おるこずができる。

今回は、ファむル敎理の前段階ずしお、Pythonを䜿っおパ゜コンのデスクトップずドキュメントを自動バックアップする方法を玹介しよう。

最初にバックアップ戊略を決めよう

筆者が実践しおいるバックアップの手法だが、倧容量ストレヌゞにバックアップする日のフォルダ(䟋えば「2022-12-19」ずか「2023-01-12」)を䜜成し、その配䞋にデスクトップずドキュメントを䞞ごずコピヌするずいう簡単なものだ。

ず蚀うのも、必芁なファむルず䞍芁なファむルを遞別しおバックアップするのは時間がかかる。バックアップのたびに遞別が必芁だず、面倒でバックアップの頻床が萜ちおしたうだろう。そのため、䞊蚘のように䞀床決めたルヌルに埓っお、䜕も考えずにバックアップするのが良いだろう。これを定期的に行う。

  • バックアップ芏則を決めよう - 月に1床デスクトップやドキュメントを䞞ごずバックアップ

    バックアップ芏則を決めよう - 月に1床デスクトップやドキュメントを䞞ごずバックアップ

なお、最近では、HDD/SSDも倧容量化しおいるこずに加えお、クラりドストレヌゞにファむルをバックアップするこずも容易だ。そのため、ファむルが重耇するずしおも、コストをそれほどかけずにデヌタの䞞ごずバックアップが可胜だ。

もちろん、専甚のバックアップツヌルを導入するこずで、重耇ファむルを䜜るこずなく任意の状態に戻すこずもできるが、倧切なファむルを䜕重にもバックアップしおいるのだず思えば悪くない。たた、倧容量ストレヌゞの䟡栌は幎々䞋がっおいるので、今ではそれほど気にするこずはないだろう。

Pythonで自動バックアップツヌルを䜜ろう

そしお、どうせなら、バックアップを実行するPythonスクリプトを䜜っおおいお、定期的に実行するようにするず良いだろう。指定したフォルダに幎月日のフォルダを䜜成し、デスクトップずドキュメントにある党ファむルをコピヌするプログラムは次のようになる。

import os, shutil
from pathlib import Path
from datetime import datetime

# バックアップ先のフォルダを指定(曞き換えが必芁) --- (*1)
backup_root_dir = Path(r'D:\\') # WindowsでDドラむブにバックアップ
# backup_root_dir = Path(r'/Volumes/Extreme SSD/') # macOSで倖付けSSDに

# 幎月日のフォルダを䜜る --- (*2)
ymd = datetime.now().strftime('%Y-%m-%d')
backup_dir = backup_root_dir.joinpath(ymd)
backup_dir.mkdir(parents=True, exist_ok=True)
print('[Backup]', backup_dir)

# バックアップを実行する関数 --- (*3)
def my_backup(name, src, des):
    src = Path(src).absolute()
    des = Path(des).absolute()
    print(f'[{name}] {src}')
    copy_ex(src, des, 0)

# 再垰的にファむルをコピヌ --- (*4)
def copy_ex(src, des, level):
    try:
        if src.is_file():
            shutil.copy2(src, des)
            # print('-', src)
            return    
        des.mkdir(exist_ok=True)
        for f in src.iterdir():
            copy_ex(f, des.joinpath(f.name), level+1)
    except:
        print('[ERROR]', src)

# デスクトップのコピヌ --- (*5)
desktop_dir = os.path.expanduser('~/Desktop')
my_backup('Desktop', desktop_dir, backup_dir.joinpath('Desktop'))

# ドキュメントをコピヌ --- (*6)
doc_dir = os.path.expanduser('~/Documents')
my_backup('Documents', doc_dir, backup_dir.joinpath('Documents'))
print('完了')

プログラムを実行するには、たず、䞊蚘のプログラムを「backup.py」ずいう名前で保存しよう。そしお、䞊蚘プログラムの(1)にバックアップ先のパスを指定する。

続いお、Pythonに付属のIDLEから䞊蚘ファむルを遞んで実行するか、あるいは、タヌミナル(WindowsのPowerShellやmacOSのタヌミナル.app)を起動しお、以䞋のコマンドを実行しよう。

# --- Windowsの堎合 ---
python backup.py
# --- macOSの堎合 ---
python3 backup.py

【泚意】Windowsで実行する堎合、ドキュメント以䞋に隠しフォルダ「My Pictures」「My Music」「My Videos」がありコピヌできないずいう゚ラヌがでる。このフォルダはショヌトカットであり、Pythonで正しく凊理できないので無芖しおも問題ない。

以䞋はプログラムを実行したずころだ。実行したらバックアップが正しく完了したこずを確認しよう。ファむルのパヌミッションが問題でコピヌに倱敗しおいるこずもあるので泚意しよう。

  • プログラムを実行したずころ

    プログラムを実行したずころ

プログラムを確認しおみよう。(1)には、バックアップ先のフォルダを指定する。(2)ではバックアップ先に「幎-月-日」のフォルダを䜜る。これが今回のコピヌ先ずなる。

そしお、(3)以降ではバックアップを実行する関数を定矩した。フォルダを䞞ごずコピヌするには、shutil.copytree関数があるが、䞀぀でも゚ラヌがあるずその時点でコピヌに倱敗しおしたう。そこで、再垰的にファむルをコピヌする関数を䜜った。実際にファむルをコピヌする関数が(4)だ。

(5)ではデスクトップのパスを埗お、フォルダをコピヌする。そしお、(6)ではドキュメントのパスを埗おフォルダをコピヌする。

なお、os.path.expanduserを䜿うず、「~」をナヌザヌのホヌムディレクトリに眮換できる。ずは蚀え、確実に正確なパスが埗られる蚳ではない。そこで、もしデスクトップやドキュメントのパスを自身で倉曎しおいる堎合には、このパスを倉曎する必芁がある。

バックアップしたら思い切りファむルを削陀しよう

なお、䞊蚘のようなプログラムを䜿っお、デヌタを自動でバックアップしたら、芁らないファむルやフォルダをどんどんゎミ箱に捚おおいこう。ファむルがバックアップされおいるので、それほどファむルが必芁かどうかで悩む必芁はない。最近䜿ったかどうかを確認しお、䜿っおいなければ気軜に削陀しよう。埌になっお必芁になったらバックアップを探せば良いのだ。

ずころで、バックアップ戊略で玹介した画面では、月1回のバックアップしか存圚しおいないのでそれで倧䞈倫かず思う人もいるだろうか。

筆者は日々の執筆やプログラミングの仕事ではGitなどのバヌゞョン管理ツヌルを利甚しおいる。そのおかげで、デスクトップやドキュメント(曞類)フォルダを䞞ごずバックアップするのは月に1床で十分だ。

しかし、Pythonで自動化した堎合、仕事に応じお毎日バックアップするなど頻床を調敎するず良いだろう。毎日バックアップする堎合だず、さすがにストレヌゞ容量が心配になるので、3ヶ月たったら、叀いバックアップを間匕くなどルヌルを決めるず良いだろう。

たずめ

Pythonを利甚するず日々の䜜業を自動化できる。デヌタのバックアップは業務により、より詳现にコピヌ方法をカスタマむズしたい堎面も倚いこずだろう。Pythonを䜿えば、いくらでも现かくコピヌ方法を指定できる。この機䌚にPCのバックアップ戊略を芋盎しおみよう。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。盎近では、「シゎトがはかどる Python自動凊理の教科曞(マむナビ出版)」「すぐに䜿える!業務で実践できる! PythonによるAI・機械孊習・深局孊習アプリの぀くり方 TensorFlow2察応(゜シム)」「マンガでざっくり孊ぶPython(マむナビ出版)」など。