폴더/하위 폴더에서 누락된 파일 찾기

폴더/하위 폴더에서 누락된 파일 찾기

을(를) 기반으로 하는 응용 프로그램이 있습니다 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)),))

관련 정보