Hallo Besucher, der Thread wurde 1,4k mal aufgerufen und enthält 0 Antworten

letzter Beitrag von 1ST1 am

Große Datei-Mengen auf einer SD, Überblick behalten...

  • Hallo, ich hab da mal wieder was gebastelt, sieht zwar evtl. trivial aus, aber das Austesten und bis es endlich fehlerfrei lief, das dauerte...


    Probleme:


    0.1 Ich habe - wie wahrscheinlich jeder von euch, eine größere Menge Diskimages, Onefiler usw. für den C64. Anmerkung: Das Sktipt vom heutigen Nachmittag habe ich bisher nur mit C64-Zeugs getestet, aber sollte eigentlich auch mit ST/Amiga-Diskimages funktionieren, da keine Dateitypen ausgeschlossen werden, auch auf einem HxC oder Gotek ist ein bischen Ordnung was Feines... Jedenfalls mit dem Filebrowser (FB) und Konsorten stößt man recht schnell an eine Grenze der darstellbaren Menge von Dateien in einem Verzeichnis auf einer SD-Karte wenn man einen SD2IEC oder verglecihbar nutzt, die Dinger können ja mit 16 GB oder größeren SD-Karten umgehen, und da passt speziell für einen C-64 ordentlich was drauf... Jedenfalls FB und Co zeigen dann nicht mehr alles an, was sich da an Dateien tummelt, gefühlt liegt die Grenze bei 250 Dateien/Unterordner, die FB dann anzeigt, an den Rest kommt man aus FB nicht heran. Und selbst im Emulator macht es Sinn das zeugs in Unterordner zu zwängen, denn sonst bekommt die Dateiauswahlbox des Emulators doch auch gerne mal dicke Backen, Sanduhr, Donutkringel, Bienchen, wenn in einem Ordner wahnisinnig viele Diskimages liegen... Das wäre die eine Problematik.


    0.2 Die andere Problematik ist, dass man nicht ständig die ganzen Befehle so eines SD2IEC im Kopf hat, und wer keine Klammeraffenbefehle benutzen kann (C64 ohne Dolphin, Prologic, Speed, Jiffy- usw. DOS) oder kein ROM-Modul mit entsprechenden Tools am 64er angestöpselt hat oder wenn das SD2IEC auf einer zweistelligen IEC-ID liegt (10...23, siehe anderen Beitrag) und die @-Befehlsabkürzung nicht nutzen kann, oder dem das ganze OPEN...-Gerotz einfach zu viel zu tippen ist, um ein Verzeichnis zu wechseln usw, der kommt da nicht so richtig schnell durch den Verzeichnisbaum.


    Dafür habe ich eine Lösung ersonnen:


    1.1 Eine Batchdatei (unter Windows) sortiert die Diskimages. Onefilers, usw. so um, dass nicht allzuviele in einem Ordner liegen. Zur Sortierung werden die ersten 4 Zeichen des Dateinamens herangezogen, das sollte auch für sehr große Sammlungen reichen
    1.2 In jedes Verzeichnis wird der Filebrowser (FB.PRG) reingepackt, so dass man den nach einem Rechnerreset sofort mit LOAD "FB",10 wieder starten kann. Wer das untere Skript für Diskimages für HxC, Gotek, CosmosEx für den ST, Amiga oder so nutzen möchte, sollte natürlich die ganzen Befehle rauswerfen, die einem den FB unterschieben wollen. FB übrigens deswegen, weil der so hübsch winzig klein ist und schnell geladen und eingetippt ist.


    Dafür sind folgende Vorraussetzungen nötig:


    A) Windows-PC (XP oder neuer) mit größerer Programm und Diskimage-Sammlung für den Commodore
    B) C-64 mit SD2IEC oder vergleichbar, durch Austausch des FB.PRG durch FB128.PRG usw. sollten auch andere Commodore-Rechner gehen.
    C) Eine SD-Karte, in deren Hauptverzeichnis schonmal FB liegt, desweiteren weitere Ordner für Diskimages, Onefilers, usw. Diese können auch weiter unterteilt werden, mit Ordner für Games, Demos, Tools, Anwender, usw.
    D) Die jeweiligen Sammlungen liegen vorsortiert vor, das heißt alle Dateien die mit einem "A" anfangen, liegen schonmal in einem Unterordner "A". So sind die meisten Sammlungen angelegt, die man irgendwo runterladen kann, meistens gibts Ordner "0-9", "0-10" oder 0 bis 9 und A bis Z... Und bei großen Sammlungen sind dann da halt mehr als 250 Dateien drin... Oder wenn man selbst alles was man bekommt, so einsortiert. Wer sein Zeugs nicht in so einer Struktur hat, hier gleich noch ein Script, was solch eine Struktur anlegt und den Schmodder einsortiert.
    E) ROBOCOPY.EXE - wer Windows Vista bis 10 hat, der hat das schon. Wer noch Windows XP verwendet, muss sich das "Windows Server 2003 Ressource Kit" (klick) von Microsoft herunterladen und installieren, da ist es mit drin. Das Robocopy neuerer Windows-Versionen lässt sich unter XP nicht starten. Wenn das Ressourcekit installiert ist, ROBOCOPY aus dem Ordner, wo es installiert wurde, am besten nach c:\windows\system32\ kopieren, dann ist es automatisch im Suchpfad.


    Vorbereitung, Ordnung ins Chaos bringen...


    Wer seine Sammlung noch nicht wie beschrieben vorsortiert hat, dem das hier nahegelegt:
    - Wie unter D beschrieben, muss eine gewisse Grundstruktur von dem Zeugs vorliegen. Dafür habe ich dieses Script gebastelt, das ist schon länger im Einsatz, damit sortiere ich bereits schon länger mein ganzes Zeugs für C64, ST und Amiga. Die Benutzung ist einfach: Einen Ordner für die Sammlung anlegen, alle Dateien der Sammlung reinwerfen, die Batchdatei !movealfa.cmd in den Ordner reinlegen und starten, und schwupps, fliegt alles in Ordner "0-9" und a, b, c ... z.



    Das Script nimmt keine Rücksicht auf Dateiendungen, alles was kommt landet in entsprechenden Unterverzeichnissem, trivial einfach. Nur Ordner werden nicht angefasst, die kann man so liegen lassen oder manuell verschieben. Das Skript kann man immer wieder ausführen, wenn neues Zeugs dazukommt. Da der Dateiname des Scrips mit einem Ausrufezeichen anfängt, verschiebt es sich selbst nicht, wie praktisch! Was die Batch nicht macht, das sind, wie geschrieben, andere Verzeichnisse in die jeweiligen Verzeichnisse reinschieben, nur Dateien werden verschoben. Wer das möchte, muss das entweder von Hand machen, oder den move-Befehl dirch ROBOCOPY ersetzen (ROBOCOPY /mov /e /s /w:1 /r:1 .\ 0-9 %%a*.* bzw. ROBOCOPY /mov /e /s /w:1 /r:1 .\ %%a %%a*.*), hab ich jetzt nicht getestet, sollte aber gehen. Es sei hierbei auch auf den anderen Beitrag verwiesen, wo es zwei Scripte gibt, die ZIP/RAR/7Z-Dateien innerhalb einer Dateistruktur entpackt und die Archive dann löscht, das ließe sich auch auf ISO-Dateien erweitern. Vorgensweise: Archive in den Krautundrüben-Ordner werfen, mit !movealfa.cmd vorsortieren, Archive von dem anderen Skript entpacken lassen, glücklich sein.


    - Optional kann man auch folgendes machen: Man legt einen Incomming-Ordner an, also so einen richtigen Krautundrüben-Ordner, legt dort !movealfa.cmd rein, lässt sich alles wie im vorigen Absatz beschrieben alles vorsortieren und auspacken, und verschiebt dann die jeweiligen Ordner aus dem Krautundrüben-Ordner in Ordner für Diskimages, Onefilers, usw. und lässt den Krautundrübenordner ansonsten vor sich hinschimmeln, wenn man genug Platz hat, man kann aber auch hinundwieder mal die ganzen Buchstabenordner löschen, wenn man nicht so viel Platz hat und man sich die ganzen Partybilder (was für lange Wolle die Leuts da auf dem Kopf haben...) nicht ansehen will. Auf dem SD2IEC, HxC oder so kann man eh nix mit oft in den Archiven und ISO-Dateien enthaltenen JPG, HTTP, GIF und was ich weiß, anfangen. Es soll ja hier darum gehen, die auf dem Commodore nutzbaren Perlen auf die SD-Karte zu hauen. So ein Raussortierscript könnte z.B. so aussehen, auch wieder ganz einfach:



    Shell-Script: !mover.cmd
    1. start robocopy /mov /s /w:1 /r:1 "H:\Emulators\C64\!Delta" "H:\Emulators\C64\!Tapes" *.t64 *.tap
    2. start robocopy /mov /s /w:1 /r:1 "H:\Emulators\C64\!Delta" "H:\Emulators\C64\!Onefiler" *.prg
    3. start robocopy /mov /s /w:1 /r:1 "H:\Emulators\C64\!Delta" "H:\Emulators\C64\!Disks" *.d64 *.d71 *.d81 *.d40 *.d70
    4. start robocopy /mov /s /w:1 /r:1 "H:\Emulators\C64\!Delta" "H:\Emulators\C64\!Sidfiles" *.sid

    Wie man sieht, mein Krautundrübenordner heißt "!Delta". Delta deswegen, weil dort alles übrig bleibt, was ich erstmal nicht brauchen kann, wie man sieht, verschiebt robocopy die interessanten Dateien, so dass sie nicht noch mal doppelt im Krautunrübenordner sind. Wer das nicht mag, ersetzt "/mov /s" durch "/s" oder (ganz gefährlich, bitte erst mit dieser Option vertraut machen!!!) mit "/mir" (das kann nämlich im Ziel auch löschen! Siehe Robocopy.doc aus obigem Ressource-Kit). Ob es D40 und D70-Dateien gibt, keine Ahnung, aber falls doch, dann sind sie mit dabei, also nix verpasst. Die Zielordner müssen natürlich vorhanden sein, sonst meckert robocopy dass das Ziel nicht da ist. Der Robocopy rennt dann durch alle Unterverzeichnisse und verschiebt/kopiert alle angegebenen Dateien ins Ziel, und zwar inklusive der Ordner-Einsortierung. Das heißt, ich habe dann z.B. einen Ordner "!Disks\T" mit 1264 Diskimages drin, die alle mit einem T im Dateinamen beginnen, was ja schonmal ganz nett ist. Und wenn in dem T-Ordner ein Ordner "the collection" drin ist, weil ich da im T-Ordner mal ein Archiv namens "The Collection.ZIP" auspacken lassen habe, dann liegen die Diskimages daraus in der selben Struktur auch in "!Disks". Nur dass FB bei 1264 Dateien dicke Backen bekommt. Dazu kommen wir jetzt.



    Feinsortierung des ganzen Krempels auf der SD-Karte


    Jetzt kommt das Skript des heutigen Nachmittags... Die Idee ist, man nehme die ersten 4 Buchstaben der Dateien in der Struktur (nicht aber in den nochmaligen Unterordnern, da ist meist eh nicht viel drin), erzeuge aus den 4 Buchstaben einen Ordner mit dem Namen und verschiebe alle Dateien mit den 4 Buchstaben am Dateinamenanfang da rein. Schon hat man lauter Unterordner in denen nur wenige Dateien liegen. Das kann man theoretisch schon auf der Festplatte, z.B. in dem "!Disks"-Ordner machen, wenn man das Zeugts z.B. im Emulator nutzen will, da ich die Sachen aber auf echter Hardware laufen lassen will, kopiere ich mir den entsprechenden Ordner erst auf eine SD-Karte und lass dann dort feiner sortieren. Grob gegliedert macht das folgende Skript zwei Schritte:
    2.1 Alle ca. 27-36 Hauptordner ("0-9", "0-10" oder 0 bis 9 und A bis Z) in einer Schleife abgrasen, Schleife, Schleife, Schleife, alle Dateien sind in Unterordnern die genauso heißen, wie die ersteb vier Buchstaben der Dateien.
    2.2 Da "if exist B\B123" leider auch Ordner findet, die mit "B123" beginnen, der move-Befehl aber keine Ordner verschieben kann, werden alle vorhandenen Ordner erstmal vom FB gesäubert, dann alle nun leere Ordner gelöscht (Ordner wo noch was drin ist, nicht, das gibt eine Fehlermeldung die nach nul umgeleitet wird), und dann wird FB wieder in die Ordner reinkopiert. move habe ich wegen Problemen inzwischen durch robocopy ersetzt, das mit dem Bereinigen der Ordner ist aber drin geblieben, we mag, mag die robocopy-Anweisungen so erweitern, dass auch Ordner mit den 4 Buchstaben am Anfang des Namens (also z.B. B123) in den entsprechendenn Unterordner (also B123) verschoben werden, ein "/s" hinter dem "/mov" reicht dafür.


    Und hier das Ding:



    Da sind schon einige Performance-Optimierungen drin, die unnötige Schleifendurchläufe vermeiden, wenn Dateien mit dem gerade laufenden %%a%%b%%c%%d garnicht vorhanden sind. Trotzdem braucht das Script mit dem Zeugs was ich gerade auf der 16 GB SD-Karte im Disks-Ordner habe, gut 45 Minuten bis es durch ist.



    Ich hoffe, dass das hier der eine oder andere gebrauchen kann.


    So, und jetzt muss ich erstmal ne Runde zocken, mal schauen, was alles schönes auf der SD-Karte gelandet ist...