파이썬 Rsync

Abid Ullah 2023년10월10일
파이썬 Rsync

끊임없이 변화하는 기술의 세계에서 우리는 여전히 파일을 전송하거나 교환해야 하는 경우에 직면할 수 있습니다. Rsync는 전송 세부 정보를 지정하는 데 도움이 되는 Linux 기반 도구입니다.

이 기사에서는 rsync와 Python 스크립트에서 rsync를 사용하는 방법을 살펴봅니다.

파이썬 Rsync

위에서 언급했듯이 rsync는 전송 세부 정보를 지정하는 데 도움이 되는 강력한 도구입니다. 즉, 전송에서 제외할 파일과 사용해야 하는 셸 종류를 결정할 수 있습니다.

Rsync는 일반적으로 전송 복잡성이 높은 전송 또는 파일을 대량으로 전송하는 데 사용됩니다. cron의 도움으로 rsync로 생성된 백업을 자동화하는 것도 가능합니다.

Linux의 rsync 명령

일반적인 rsync 명령 형식은 다음과 같습니다.

rsync [option] [origin] [destination]

이것은 Linux에 익숙할 때 간단한 명령이지만 어쨌든 분해하겠습니다. 모든 명령은 rsync 키워드로 시작합니다.

그 다음에는 선택의 폭이 넓은 옵션이 뒤따릅니다. 각 옵션은 실행하려는 rsync의 특성을 지정합니다.

여기에서 원본과 대상은 파일을 전송하려는 위치(대상)와 위치(원본)입니다. 이것은 rsync가 많은 경고 없이 파일을 다시 쓰는 원인이 되는 경우가 많기 때문에 우리가 동기화하는 것이 무엇인지 뿐만 아니라 로컬 또는 원격 시스템에서 동기화하는지 여부에 주의해야 함을 의미합니다.

다음은 rsync에 대한 기본 및 공통 옵션 목록입니다.

  1. -a - 이 옵션은 파일을 재귀적으로 복사하는 데 도움이 되며 파일이 복사된 후에도 파일 소유권을 보존하는 데 도움이 됩니다.
  2. -dry-run - 이 옵션을 사용하면 명령이 실행될 경우 발생하는 변경 사항을 관찰하기 위해 명령에 대한 시험을 실행할 수 있습니다. 이 옵션은 실제 변경 사항을 가져오지 않습니다.
  3. -delete - 이 옵션은 대상 시스템/디렉토리에서 외부 파일을 삭제하는 데 도움이 됩니다.
  4. -e - 이 옵션은 사용해야 하는 쉘에 대해 rsync에 알리는 데 도움이 됩니다.
  5. -exclude="*.filetype" - 이 옵션을 사용하면 전송에서 특정 파일 유형을 모두 제외할 수 있습니다. 위의 명령에서 filetype을 실제 파일 형식으로 바꿉니다. 예: -exclude="*.docx".
  6. -h - 이 옵션은 rsync에 대한 도움말을 시작하는 데 도움이 됩니다.
  7. -progress - 이 옵션은 명령이 실행될 때 전송 진행률을 표시하는 데 도움이 됩니다.
  8. -q - 이 옵션은 백그라운드에서 또는 조용히 모든 명령을 실행합니다.
  9. -v - 이 옵션은 사용자가 실행 중인 모든 프로세스를 읽을 수 있도록 전송합니다.
  10. -z - 이 옵션은 동기화된 데이터를 압축하는 데 도움이 됩니다.

Python 스크립트에서 Rsync 사용

이제 Python에서 Rsync를 사용하는 두 가지 방법이 있습니다.

  1. subprocess를 호출하고 rsync 명령을 지정합니다.

    import subprocess
    
    subprocess.call(["rsync", "[option]", "[origin]", "[destination]"])
    
  2. pyrsync 라이브러리 사용

    맞습니다. Python은 이제 Rsync용 라이브러리를 제공합니다. 이 라이브러리는 Rsync의 래퍼가 아니지만 Rsync 자체의 완전한 기능을 포함합니다.

    pip를 통해 이 라이브러리를 설치할 수 있습니다.

    pip install pyrsync
    

처음에 rsync는 MD5 해시를 사용해야 합니다. 개발자는 현대화된 pyrsync에서 사용하는 SHA256을 사용하는 것과 비교하여 구식이라고 생각하는 경우가 많습니다. SHA256은 검증 프로세스의 보안에 대한 표준 요구 사항을 충족합니다.

pyrsync는 출시 이후 주요 릴리스가 없었지만 개발 세계에서 엄청난 잠재력을 가지고 있음을 관찰할 수 있으며 현재 이 라이브러리에는 버그나 취약점이 없는 것으로 알려져 있습니다.

라이브러리를 사용할 수 없으므로 사용 가능한 소스 코드에서 빌드하고 설치해야 합니다.

‘Pyrsync’는 처음부터 제공하는 기능을 구축하지 않아도 되므로 개발 시간과 리소스를 절약할 수 있는 잠재력이 있습니다.

읽기 쉬운 코드와 Pypi의 간단한 설치 지침을 통해 스크립트에 통합하기가 매우 쉽습니다.

시스템에 설치 도구가 이미 설치되어 있는 경우 이 명령을 실행해야 합니다.

$ sudo python setup.py install

시스템에 설정 도구가 없더라도 setup.py 스크립트는 부재를 감지하고 Python의 내장 distutils를 대신 사용하도록 기본값을 설정합니다.

이 모듈에 대한 명령 스크립트의 예제 흐름은 다음과 같습니다.

# In the system with the file that needs patching
>>> import pyrsync2
>>> unpatched = open("unpatched.file", "rb")
>>> hashes = pyrsync2.blockchecksums(unpatched)
# In the remote machine receiving hashes
>>> import pyrsync2
>>> patchedfile = open("patched.file", "rb")
>>> delta = pyrsync2.rsyncdelta(patchedfile, hashes)
# In the origin machine with the unpatched file after receiving delta
>>> unpatched.seek(0)
>>> save_to = open("locally-patched.file", "wb")
>>> pyrsync2.patchstream(unpatched, save_to, delta)

여기서 주목해야 할 중요한 점은 이 라이브러리가 현재 Python 3에 대한 지원만 제공한다는 것입니다.

이 기사가 Python에서 rsync를 사용하는 방법을 이해하는 데 도움이 되기를 바랍니다.

작가: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn