気付くとデスクトップやドキュメントに要らないファイルがたくさんあるという方も多いのではないだろうか。今回は、Pythonでデスクトップとドキュメントのフォルダを自動バックアップするプログラム作ってみよう。バックアップしておけば安心してPC内の大掃除ができる。
捨てられない人でもPCなら大丈夫
「部屋の乱れは心の乱れ」と言われても、なかなか掃除する気にならないという人も多いだろう。掃除が苦手な人のPCはやはりファイルも乱雑になっている印象がある。しかし、パソコンの中であれば、ルールさえしっかり決めてしまえば、スッキリと整理ができる。
そもそも、掃除が苦手で部屋が汚い人の多くが抱える問題が「捨てられないこと」だ。物に溢れているなら、いかに上手に収納しようが乱雑な印象が残ってしまう。この点、PC内のデジタルデータは完全な複製が可能なので、バックアップさえとってしまえば、あまり使わないファイルは心置きなくPCから捨てることができる。
今回は、ファイル整理の前段階として、Pythonを使ってパソコンのデスクトップとドキュメントを自動バックアップする方法を紹介しよう。
最初にバックアップ戦略を決めよう
筆者が実践しているバックアップの手法だが、大容量ストレージにバックアップする日のフォルダ(例えば「2022-12-19」とか「2023-01-12」)を作成し、その配下にデスクトップとドキュメントを丸ごとコピーするという簡単なものだ。
と言うのも、必要なファイルと不要なファイルを選別してバックアップするのは時間がかかる。バックアップのたびに選別が必要だと、面倒でバックアップの頻度が落ちてしまうだろう。そのため、上記のように一度決めたルールに従って、何も考えずにバックアップするのが良いだろう。これを定期的に行う。
なお、最近では、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)を起動して、以下のコマンドを実行しよう。