저는 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이 설치되어 있습니다).
- 다른 이름으로 저장
copy.py
- 용법:
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])