2012-07-23 2 views
2

파이썬 2.7.3을 사용하고 있습니다. 파이썬 스크립트를 사용하여 디렉토리 트리의 일부를 한 위치에서 다른 위치로 복사합니다. 복사해야하는 파일 중 일부는 심볼릭 링크입니다.Python 2.7.3 : 심볼릭 링크를 복사하고 따르지 않음

파이썬을 사용하여 심볼 링크를 따르지 않고 위치에서 다른 곳으로 복사하는 방법은 무엇입니까? (단지 '정규'파일처럼 맹목적으로 복사하기를 원합니다.)

follow_symlinks=False을 지원하지만 이전 버전의 shutil은 지원하지 않습니다.

편집 : 자세한 내용은 :

이 스크립트의 목적은 지정된 위치에서 모든 파일을 개인 아카이브로를 분할하는 것입니다. 전체 디렉토리를 압축하고 아카이브를 분할하여이 작업을 수행 할 수 있음을 알고 있지만 하나의 큰 아카이브에 다시 참여하지 않고 각 아카이브를 개별적으로 추출 할 수 있어야합니다. 또한 각 아카이브는 지정된 크기보다 작아야합니다.

기본 접근 방식 :

  1. 모든 파일의 모든 크기를 가져옵니다 소스 디렉토리의 모든 파일에 대한 모든 절대 경로
  2. 정렬 모든 파일 (위치에 관계없이) 크기
  3. 파일을 복사하여 가져 오기 위치 X에서 tmp 위치까지 (복사 된 파일의 합계가 < = 최대 아카이브 크기 일 때까지)
  4. tmp의 아카이브 생성
  5. 청소 tmp에 위치 다시 4-
  6. 이동 여전히

모든 의견을 주시면 감사하겠습니다을 복사 할 파일이있는 동안. 감사.

답변

3

디렉토리 트리의 일부를 복사한다고합니까? 이 경우 shutil.copytree()을 시도하십시오.

symlinks가 true이면 원본 트리의 심볼릭 링크가 새 트리의 심볼릭 링크로 표시되지만 원본 링크의 메타 데이터는 복사되지 않습니다. false 또는 생략되면 링크 된 파일의 내용과 메타 데이터가 새 트리에 복사됩니다.

메타 데이터를 동일하게 유지할 필요가없는 한 실제로는 이러한 메타 데이터가 포함 된 심볼 링크를 사용해도되고 실제로 파일의 메타 데이터를 참조 할 수도 있습니다./그들이 가리키는 객체?). copytree()으로 전체 트리를 복사 할 필요가 없습니다. ignore 인수를 사용하면 복사 할 파일과 디렉토리를 정리할 수있는 호출 가능 파일을 제공 할 수 있습니다.

한 가지주의 할 점 : ignore 호출 가능으로 전달 된 내용 목록을 수정하면 복사 대상에 영향을 미칩니다 (the copytree() source code에서 볼 수있는 것처럼).


는 (복사하기/설명에서 부연) shutil.copytree() 구현 같이

copytree() 방법이 "복사"심볼 링크하더라도위한 참조로서 사용될 수있다 심볼릭 링크 (linkto = os.readlink(srcname); os.symlink(linkto, dstname))를 처리하는 방법을 도시 copytree() 자체는 유용하지 않습니다.

+0

내 질문에 대한 자세한 내용을 추가했습니다. 나는'shutil.copytree()'가 내 솔루션이 현재 설계된 방식으로 작동하지 않을 것이라고 생각한다. – rkyser

+0

아마도 그렇지는 않지만,'copytree()'구현은'simlinks'가 true 일 때'copytree()'가 심볼릭 링크를 처리하는 방법을 보여줍니다. 왜 그것을 참고 자료로 사용하지 않습니까? 'shutil.copy()'또는'shutil.copy2()'를'shutil.copytree()'에서 몇 줄을 추가하고 그것을 사용하는 복사 방법으로 포장하십시오. – JAB

+0

shutil.copytree()가'linkto = os.readlink (srcname)'다음에'os.symlink (linkto, dstname)'을 사용하는 것처럼 보입니다. 기본적으로 내가했던 일은 내 '일터'로 했어! 나는 그것이 그것을하는 방법다는 것을 의미한다 것을 나는 짐작한다. – rkyser

관련 문제