긴 이름의 파일 복사 [닫기]

긴 이름의 파일 복사 [닫기]

저는 Linux Ubuntu 16을 사용하고 있으며 HDD에서 SSD로 약 400GB(약 100,000개 파일)의 데이터를 복사해야 합니다. 그 중 약 1000개의 이름이 "너무 긴" 이름을 갖고 있고 이를 찾는 데 시간이 오래 걸리기 때문에 건너뛸 수 없기 때문에 이 작업을 수행할 수 없습니다. 이름이 긴 파일을 복사하는 절차가 있나요?

답변1

원래의 (잘못된) 답변

멋진 사람들이 말하면 그것은 rsync매력처럼 작동합니다.

rsync -auv --exclude '.svn' --exclude '*.pyc' source destination

원래 답변:https://superuser.com/a/29437/483428

UPD: 스크립트 포함

rsync글쎄요, 다른 멋진 사람들은 이것이 해결책이 아니라고 말했습니다 .파일 시스템 자체는 긴 이름을 지원하지 않습니다.. 나는 이것이 rsync신이 만든 형이상학적인 낮은 수준의 초비밀 도구가 아니라는 점에 주목해야 합니다. (그런데 Windows에는 그런 도구가 많이 있습니다.)

SRC따라서 여기에 모든 파일을 복사 하고 DST파일 이름을 인쇄하여 오류(긴 이름 포함)를 일으키는 짧은 Python 스크립트가 있습니다(내가 아는 한 Ubuntu에는 기본적으로 Python 2.7이 설치되어 있습니다).

  1. 다른 이름으로 저장copy.py
  2. 용법:python copy.py SRC DEST
import os
import sys
import shutil

def error_on_dir(exc, dest_dir):
    print('Error when trying to create DIR:', dest_dir)
    print(exc)
    print()

def error_on_file(exc, src_path):
    print('Error when trying to copy FILE:', src_path)
    print(exc)
    print()

def copydir(source, dest, indent = 0):
    """Copy a directory structure overwriting existing files"""
    for root, dirs, files in os.walk(source):
        if not os.path.isdir(root):
            os.makedirs(root)
        for each_file in files:
            rel_path = root.replace(source, '').lstrip(os.sep)
            dest_dir = os.path.join(dest, rel_path)
            dest_path = os.path.join(dest_dir, each_file)

            try:
                os.makedirs(dest_dir)
            except OSError as exc:
                if 'file exists' not in str(exc).lower():
                    error_on_dir(exc, dest_dir)

            src_path = os.path.join(root, each_file)
            try:
                shutil.copyfile(src_path, dest_path)
            except Exception as exc:
                # here you could take an appropriate action
                # rename, or delete...
                # Currently, script PRINTS information about such files
                error_on_file(exc, src_path)


if __name__ == '__main__':
    arg = sys.argv
    if len(arg) != 3:
        print('USAGE: python copy.py SOURCE DESTINATION')
    copydir(arg[1], arg[2])

관련 정보