shutil 모듈은 파일 또는 디렉토리에 대한 복사, 이동, 삭제 등에 관한 기능을 제공합니다.

 

복사하기

shutil.copy(src, dst)

 

파일 src 를 파일 또는 디렉토리 dst 에 복사 합니다. src  dst 는 문자열이어야합니다.

copy()는 파일 데이터와 파일의 권한 모드를 복사합니다. 파일의 생성 및 수정 시간과 같은 다른 메타 데이터까지 복사할려면 copy2()를 대신 사용하면 됩니다.

 

(버전 3.8 이후) 파일을 더 효율적으로 복사하기 위해서 플랫폼 별 fast-copy syscall을 사용할 수 있습니다.

파일 복사와 관련된 모든 기능 ( copyfile(), copy(), copy2(), copytree(), move()) 에서 fast-copy를 사용할 수 있습니다. fast-copy는 작업이 커널 내에서 발생하여 "outfd.write(infd.read())"와 달리 Python userspace buffers 사용을 피할 수 있습니다.

macOS에서는 fcopyfile linux는 os.sendfile()이 사용됩니다.

fast-copy가 실패하고 데이터가 기록되지 않은 경우 shutil은 copyfileobj() 내부적으로 덜 효율적인 기능을 사용하여 자동으로 풀백됩니다.

 

shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy,
                ignore_dangling_symlinks=False, dir_exist_ok=False)

copytree는 src를 루트로 하는 전체 디렉토리 트리를 dst에 복사합니다.

dir_exist_ok는 dst의 누락된 상위폴더가 이미 존재하는 경우 예외를 발생시킬지 여부를 체크합니다.

symlink가 True면 src 디렉토리에 있는 심볼릭링크 들은 dst 디렉토리에 심볼릭 링크로 생성됩니다.

symlink가 False면 src 디렉토리에 심볼릭링크에 연결된 파일이 dst 디렉토리로 복사됩니다.

symlink가 False이고 심볼릭링크에 연결된 파일이 없을때 error가 발생하는데 이 때 ignore_dangling_symlinks 플래그를 True로 설정하면 error메세지가 발생하지 않습니다.

 

shutil.rmtree(path, ignore_errors = False, onerror = None)

path 디렉토리를 삭제합니다. ignore_errors가 True라면 삭제 실패시 발생하는 에러는 무시됩니다. ingore_errors가 False거나 생략되면 onerror에 지정된 핸들러를 호출하여 처리하거나 예외를 발생시킵니다.

 

shutil.move(src, dst, copy_function = copy2)

src의 파일 또는 디렉토리를 dst로 이동하고 리턴합니다.

dst의 대상이 이미 존재하는 디렉토리라면 src가 해당 디렉토리 안으로 이동합니다. 또는 대상이 이미 존재하지만 디렉토리가 아니라면 덮어 쓸수도 있습니다.

 

shutil.disk_usage(path)

path에 대한 디스크 사용량 통계를 total, used 및 free 속성을 가진 튜플을 바이트 단위로 리턴합니다. 

 

shutil.which(cmd)

cmd가 호출된 경우 cmd의 경로 디렉토리를 반환합니다.

 

출처

https://docs.python.org/3/library/shutil.html