をベースにしたアプリケーションがありますrsync --link-dest
。ディスク使用量をさらに最適化しようとしています。
場合によっては、ソースフォルダにある大容量ファイルを削除することがあります。適切であると判断された場合、バックアップからそのファイルを削除できるように、これらのファイルを自動的に検索する簡単な方法は何ですか?
/media/backup
「100MBより大きく、どれともハードリンクされていないファイルを探す/media/backup/latest
」のようなものはありますか?
メモ:
- フォルダには、
/media/backup
日付で名前が付けられた10〜20のバックアップフォルダがあります。latest
これはシンボリックリンクです...推測されましたが。 - ファイルは時々移動または名前が変更され、その場合は時々チェックに合格するため、
hardlink
ファイル名ではなくinodeで検索を実行する必要があるとします。 - たとえば、ハードリンクを識別するためのツールがあることがわかります
du
。du /media/backup/*
追加各バックアップフォルダはバックアップファイルを使用しますが、どのように利用するのかわかりませんfind
。
答え1
いいですね…それで、プログラムする時間です。
これは私のユースケースに適しています。私はこれが不都合なコードであることを十分に知っていますが...他の人に役立つ場合に備えて投稿します。期待していたよりも良い成果を出しました。
#!/usr/bin/python3
import sys
import os
if len(sys.argv) < 3:
print("Usage: %s <basepath> <minsize>" % (sys.argv[0],))
size = int(sys.argv[2])
# step 1: find inodes of all large files in most recent backup
inodes = []
for root, dirs, files in os.walk(sys.argv[1]+"latest"):
for name in files:
file = os.path.join(root, name)
statinfo = os.stat(file)
if(statinfo.st_size >= size):
inodes.append(statinfo.st_ino)
# step 2: find inodes of all large files in all backups, and display if only not in list built in step 1
for root, dirs, files in os.walk(sys.argv[1]):
for name in files:
file = os.path.join(root, name)
statinfo = os.stat(file)
if(statinfo.st_size >= size):
try:
position=inodes.index(statinfo.st_ino)
except ValueError:
print("Match: %s (%dMB)" % (file,(statinfo.st_size/(1024*1024)),))