Copiar archivos con nombres largos

Copiar archivos con nombres largos

Estoy en Linux Ubuntu 16 y necesito copiar alrededor de 400 GB (unos 100.000 archivos) de datos de mi HDD a mi SSD. Esto no puedo hacerlo porque alrededor de 1000 de esos archivos tienen un "nombre demasiado largo" y no puedo simplemente omitirlos, ya que tomará mucho tiempo encontrarlos. ¿Algún programa que copie archivos con nombres largos?

Respuesta1

Respuesta original (incorrecta)

Chicos geniales dijeron que eso rsyncfunciona de maravilla:

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

Respuesta original:https://superuser.com/a/29437/483428

UPD: con guión

ok, otros chicos geniales dijeron, eso rsyncno es una solución, cuandoEl sistema de archivos en sí no admite nombres largos.. Tomaré nota de que rsyncno es una herramienta metafísica súper secreta de bajo nivel, creada por dioses (hay muchas herramientas de este tipo para Windows, por cierto;)

Entonces, aquí hay un breve script de Python (python 2.7 está instalado de forma predeterminada en Ubuntu, como yo sé), que copia todos los archivos de SRCa DSTe imprimirá los nombres de los archivos que causaron errores (incluidos los nombres largos).

  1. Guárdalo comocopy.py
  2. Uso: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])

información relacionada