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 rsync
funciona 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 rsync
no es una solución, cuandoEl sistema de archivos en sí no admite nombres largos.. Tomaré nota de que rsync
no 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 SRC
a DST
e imprimirá los nombres de los archivos que causaron errores (incluidos los nombres largos).
- Guárdalo como
copy.py
- 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])