Dateien mit langen Namen kopieren

Dateien mit langen Namen kopieren

Ich verwende Linux Ubuntu 16 und muss etwa 400 GB (etwa 100.000 Dateien) Daten von meiner Festplatte auf meine SSD kopieren. Das geht nicht, weil etwa 1000 dieser Dateien „zu lange Namen“ haben und ich sie nicht einfach überspringen kann, da es sehr lange dauern würde, sie zu finden. Gibt es ein Programm, das Dateien mit langen Namen kopiert?

Antwort1

Ursprüngliche (falsche) Antwort

Coole Jungs haben erzählt, das rsyncklappt super:

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

Ursprüngliche Antwort:https://superuser.com/a/29437/483428

UPD: mit Skript

ok, andere coole Jungs sagten, das rsyncist keine Lösung, wennDas Dateisystem selbst unterstützt keine langen Namen. Ich nehme zur Kenntnis, dass rsynces sich hier nicht um ein metaphysisches, von Göttern erschaffenes, supergeheimes Low-Level-Tool handelt (übrigens gibt es eine Menge solcher Tools für Windows ;)

Hier ist also ein kurzes Python-Skript (Python 2.7 ist standardmäßig auf Ubuntu installiert, soweit ich weiß), das alle Dateien von SRCnach kopiert DSTund die Namen der Dateien druckt, die Fehler verursacht haben (einschließlich langer Namen).

  1. Speichern untercopy.py
  2. Verwendung: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])

verwandte Informationen