S: Programm das die Dateien der Größe nach auf Platte kopiert

siebengescheit

Cadet 4th Year
Registriert
Juli 2024
Beiträge
102
128 GB SSD Platten enthalten sensible Daten - ich will die Platten überschreiben bzw. mit ungefährlichen Daten voll kriegen, bevor die Platten zur externen sicheren Verwertung gehen.

Ich habe Dateien bereit gestellt. Die Dateien liegen in Verzeichnissen wie z. B.

C:\Sinnlos\unterverzeichnis_1
C:\Sinnlos\unterverzeichnis_2
C:\Sinnlos\unterverzeichnis_3

und so weiter

ich suche unter Windows 11 einen Weg, die Dateien der Größe nach zu kopieren:

Schritt 1: Das Programm prüft den freien Platz auf der zu überschreibenden Platte.

Schritt 2: Das Programm sucht unter C:\Sinnlos\ egal in welchem Unterverzeichnis die Datei die in ihrer Größe möglichst nah am nach Schritt 1 ermittelten Platz liegt.

Schritt 3: Das Programm kopiert die nach Schritt 2 ermittelte Datei irgendwo hin auf die Zielplatte D: , ob die Verzeichnisse aufrecht erhalten werden oder nicht ist mir egal.

Schritt 4: Das Programm geht zu Schritt 1, ermittelt den Platz neu und sucht eine neue Datei


Welche Wege gibt es ? Tools finde ich keine, xcopy wird dauern ...

Danke für Euere Ideen
 
siebengescheit schrieb:
Welche Wege gibt es ?
Würde mir einfach ein python Skript basteln. Hier mal eine erste ChatGPT Ausgabe:
Code:
import os
import shutil

def get_free_space(path):
    """Ermittelt den freien Speicherplatz auf der angegebenen Partition."""
    total, used, free = shutil.disk_usage(path)
    return free

def find_closest_file(directory, target_size):
    """Findet die Datei, deren Größe am nächsten zur Zielgröße liegt."""
    closest_file = None
    closest_size_diff = float('inf')

    for root, _, files in os.walk(directory):
        for file in files:
            file_path = os.path.join(root, file)
            try:
                file_size = os.path.getsize(file_path)
                size_diff = abs(target_size - file_size)
                if size_diff < closest_size_diff:
                    closest_size_diff = size_diff
                    closest_file = file_path
            except OSError:
                continue

    return closest_file

def copy_file_to_drive(file_path, destination_drive):
    """Kopiert die angegebene Datei auf die Zielpartition."""
    try:
        destination_path = os.path.join(destination_drive, os.path.basename(file_path))
        shutil.copy(file_path, destination_path)
        print(f"Datei {file_path} wurde nach {destination_path} kopiert.")
    except Exception as e:
        print(f"Fehler beim Kopieren der Datei {file_path}: {e}")

def overwrite_drive(source_directory, target_drive):
    """Führt den gesamten Prozess aus, um die Zielpartition zu überschreiben."""
    while True:
        free_space = get_free_space(target_drive)
        print(f"Freier Speicherplatz auf {target_drive}: {free_space} Bytes")

        if free_space <= 0:
            print("Die Zielpartition ist voll.")
            break

        closest_file = find_closest_file(source_directory, free_space)
        if closest_file is None:
            print("Keine geeigneten Dateien gefunden.")
            break

        copy_file_to_drive(closest_ftile, target_drive)

if __name__ == "__main__":
    source_directory = "C:\\Sinnlos"
    target_drive = "D:\\"

    print("Starte den Prozess...")
    overwrite_drive(source_directory, target_drive)
    print("Prozess abgeschlossen.")

Ah, das ist gar kein Backup von Daten - dann ergibt das gar keinen Sinn. Siehe Kommentar #2.
 
siebengescheit schrieb:
bevor die Platten zur externen sicheren Verwertung gehen.
1x hammer.


siebengescheit schrieb:
ich suche unter Windows 11 einen Weg, die Dateien der Größe nach zu kopieren:
kannst linux vom stick starten und es grob so machen:

find /source_directory -type f -print0 | xargs -0 du -b | sort -nr | cut -f2 | rsync --files-from=- / /destination_directory
 
wenn der hammer sowieso das ziel ist, dann spar dir den aufwand und mach die flash-chips direkt kaputt...
 
  • Gefällt mir
Reaktionen: madmax2010
ich habe den eben aus meiner history sehr grob zusammen gezimmert.
sag bitte ob er so schon funktionierte
find /source_directory -type f -exec du -b {} + | sort -nr | awk '{print $2}' | rsync --files-from=- / /destination_directory

macht eventuell schon was mehr Sinn, wenn die struktur behalten werden soll
Aber auch hier: ungetestet
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: nutrix

Ähnliche Themen

Zurück
Oben