Welche Mathematica-Dateien können gelöscht werden, um Speicherplatz zu sparen

  • Nach der Installation benötigt Mathematica 8 für Linux mehr als 3 GB im Verzeichnis / usr / local / Wolfram /. Ich vermute, dass nicht alles relevant ist, wenn ich gelegentlich Berechnungen durchführen möchte. Gibt es Unterverzeichnisse, die sicher gelöscht werden können, um Platz zu sparen?

    05 August 2015
    Łukasz
4 answers
  • Die Hälfte davon scheint in ../Documentation zu sein. Sie können das löschen und auf der Wolfram-Site im Web nachschlagen

    29 May 2012
    image_doctor
  • Da Windows für mich keine Verzeichnisgrößen anzeigt, habe ich ein kleines Hilfsprogramm geschrieben, mit dem Mathematica sie in einer zusammenklappbaren Baumform anzeigen kann (Code unten).

    Ich habe einige Kandidaten zum Löschen geöffnet, aber Sie sollten sie zuerst versuchen, indem Sie die spezifischen Verzeichnisse aus der MMA-Verzeichnisstruktur verschieben. Wie Image_doctor sagte, ist die Dokumentation ein guter Kandidat sowie die von Szabolcs vorgeschlagene 32/64-Bit-Version der Binaries. Weitere Kandidaten finden Sie im Links-Verzeichnis (berühren Sie jedoch nicht das MathLink-Verzeichnis; viele der anderen sind wahrscheinlich sicher, aber keine Garantie).

    Welche Mathematica-Dateien können gelöscht werden, um Speicherplatz zu sparen

     directoryTree[startDir_] :=
     Module[{names, dirs, files, sizeFiles, sizeDirs, sons},
      SetDirectory[startDir];
      names = FileNames[];
      dirs = Select[names, (FileType[#] == Directory &)];
      files = Complement[names, dirs];
      sizeFiles = Total[FileByteCount /@ files];
      sons = If[Length[dirs] > 0, directoryTree /@ dirs, {}];
      ResetDirectory[];
      sizeDirs = If[Length[sons] > 0, Total[sons[[All, 2 ;; 3]], 2], 0];
      {startDir, sizeFiles, sizeDirs, sons}
    ]
    
    dirTreeView[{}] := ""
    dirTreeView[dT_] := 
      OpenerView[
        {
         Row[{First[dT], " (", Length[dT[[4]]], ", ", Total@dT[[2 ;; 3]], ")"}], 
         Column[dirTreeView /@ dT[[4]], Frame -> All]
        }
      ]
    
    dirTreeView@directoryTree[$InstallationDirectory]
     
    30 May 2012
    Sjoerd C. de Vries
  • Im Allgemeinen können Sie Verzeichnisse löschen, die nicht den von Ihnen verwendeten Einstellungen von $SystemID entsprechen. Ich könnte zum Beispiel den Inhalt von

     SystemFiles/Kernel/SystemResources/MacOSX-x86/
     

    löschen, da Mathematica auf meinem Rechner "MacOSX-x86-64" als $SystemID, daher werden die Dateien in

     SystemFiles/Kernel/SystemResources/MacOSX-x86-64/
     

    zusätzlich verwendet Als extremes Maß ist auf OS X MathKernel eine universelle Binärdatei:

     > file MathKernel 
    MathKernel: Mach-O universal binary with 2 architectures
    MathKernel (for architecture i386): Mach-O executable i386
    MathKernel (for architecture x86_64): Mach-O 64-bit executable x86_64
     

    und Sie können verwenden lipo (- saugen, nehme ich an) von einer Befehlszeile aus, um sie zu verdünnen:

     lipo -extract i386 -output MathKernel32 MathKernel
    lipo -extract x86_64 -output MathKernel64 MathKernel
     

    und dann benennen Sie den entsprechenden Kernel in MathKernel um. Auf meinem System würde dies etwa 70 MB einsparen.

    07 June 2012
    Brett Champion
  • Als Ergänzung zu den anderen Antworten finden Sie hier ein Codebeispiel, das die Ausgabe aus den Dokumentationsnotizen löscht. Fügen Sie dies in eine Datei .nb ein, speichern Sie sie und führen Sie sie aus. Ich habe sie mit Mathematica 10.4 getestet. Sie müssen sicherstellen, dass die Dokumentationsnotizen für das Benutzerkonto schreibbar sind, unter dem Sie Mathematica ausführen, während das Skript ausgeführt wird.

    In meinen Tests gibt es einen ziemlich bedeutsamen Haken: Dies stürzt das Frontend ab. Wiederholt. Durchschnittlich alle ~ 200 Dateien. Um dies zu umgehen, druckt der Code alle 20 Dateien die Anzahl der bisher verarbeiteten Dateien aus und speichert sie dann selbst. Auf diese Weise können Sie bei einem Absturz das Notizbuch öffnen, die letzte gedruckte Ausgabe anzeigen und das erste Argument von stripDocs entsprechend anpassen, sodass Sie feststellen können, wo Sie aufgehört haben. Mir ist klar, dass dies alles andere als ideal ist, aber da in den anderen Antworten kein spezifischer Code vorhanden ist, dachte ich, es wäre nützlich.

     directoryTreeRecursion[startDir_] := Block[
      {names, dirs, files, sizeFiles, sizeDirs, children},
      Sow[startDir, "directory"];
      SetDirectory[startDir];
      names = FileNameJoin[{startDir, #}] & /@ FileNames[];
      dirs = Select[names, (FileType[#] == Directory &)];
      files = Complement[names, dirs];
      Sow[#, "file"] & /@ files;
      children = 
       If[Length[dirs] > 0, directoryTreeRecursion /@ dirs, {}];
      ResetDirectory[];
      ]
    directoryTree[startDir_] := Reap[directoryTreeRecursion[startDir]][[2]]
    
    stripOutput[filename_, mode_: "Notebook"] := Block[{},
      Switch[mode,
       "FrontEnd",
       (*advise against using this, it will close the current notebook*)
       FrontEndExecute[{
         FrontEndToken["Open", filename],
         FrontEndToken["DeleteGeneratedCells"],
         FrontEndToken["Save"],
         FrontEndToken["Close"]
         }],
       "Notebook",
       Block[{nb},
        nb = NotebookOpen[filename, Visible -> False];
        NotebookDelete[Cells[nb, CellStyle -> "Output"]];
        NotebookSave[nb];
        NotebookClose[nb];
        ],
       _,
       Message[stripOutput::mode, mode];
       ]
      ]
    stripOutput::mode = "`1` is not a valid mode; only \"Kernel\" or \"FrontEnd\" is recognized."; 
    
    doclist = directoryTree@FileNameJoin[{$InstallationDirectory, "Documentation"}];
    docnblist = Select[doclist[[2]], StringEndsQ[#, ".nb"] &];
    
    timeFormat[seconds_] := Block[
      {h = Floor[seconds/3600], m = Mod[Floor[seconds/60], 60], 
       s = Mod[seconds, 60]},
      TemplateApply[
       If[h > 0, "`1`:`2`:`3`",
        If[m > 0, "`2`:`3`",
         "0:`3`"
         ]
        ],
       {h, If[m < 10, "0" ~~ ToString[m], m], 
        If[s < 10, "0" ~~ ToString[s], s]}
       ]
      ]
    
    stripDocs[min_, max_] := Block[
      {
       numberTemplate = 
        StringTemplate["Currently processing `1` of `2`"],
       timeProgressTemplate = 
        StringTemplate["`1` elapsed, `2` estimated remaining"],
       startTime,
       fn
      },
      startTime = AbsoluteTime[];
      Monitor[
       For[i = min, i <= max, i += 1,
        fn = docnblist[[i]];
        stripOutput[fn];
        If[
         Mod[i, 20] == 0,
         PrintTemporary[i];
         NotebookSave[];
         Pause[1]
         ]
        ],
       Column[{
         ProgressIndicator[Dynamic[i], {min, max + 1}, 
          ImageSize -> {500, 20}],
         numberTemplate[i - min + 1, max - min + 1],
         With[{t = AbsoluteTime[] - startTime}, 
          timeProgressTemplate[timeFormat@Ceiling[t], 
           timeFormat@Ceiling[(max + 1 - i)/(i - min + 1) t]]],
         docnblist[[i]]
         }]
       ]
      ]
    
    stripDocs[1, Length[docnblist]]
     

    Teile dieses Codes wurden von Sjoerds Antwort und zu einer anderen Frage Antwort von Szabolcs , Istváns Antwort und bobknights Antwort

    19 May 2016
    Adam Ernst