{"id":34,"date":"2017-03-19T20:19:42","date_gmt":"2017-03-19T20:19:42","guid":{"rendered":"http:\/\/commitnrun.louvard.de\/?p=34"},"modified":"2018-11-10T19:56:02","modified_gmt":"2018-11-10T19:56:02","slug":"rettung-mit-core","status":"publish","type":"post","link":"https:\/\/www.louvard.de\/CommitNRun\/?p=34","title":{"rendered":"Rettung mit core"},"content":{"rendered":"<p><em>Vorher lesen:\u00a0<a href=\"http:\/\/commitnrun.louvard.de\/?p=14\">Gesichert und verschwunden!<\/a><\/em><\/p>\n<h1>Files, Streams und Maps<\/h1>\n<p>Jetzt dass das Ausma\u00df des Desasters bekannt ist, kann die Rettung begonnen werden. Daf\u00fcr werde ich keinen Plan machen, sondern Schritt f\u00fcr Schritt vorgehen.<\/p>\n<ul>\n<li>Die Liste aller vermissten Bilder, oder besser gesagt 300 davon, habe ich schon.<\/li>\n<li>Ich werde also versuchen, diese Bilder in meiner Ablage (NAS) zu finden. Die Bilder sind dort chronologisch sortiert in Unterverzeichnissen: es wird eine rekursive Methode brauchen. Der NAS ist \u00fcber Samba-Mount an dem Mac angebunden, ich kann also direkt darauf zugreifen. Dann probiere ich es schon mal mit Brute-Force.<br \/>\n<script src=\"https:\/\/gist.github.com\/cfdd73\/1a6bc06521b3ef5305793ce193c61cb1.js\"><\/script><\/li>\n<\/ul>\n<p>Die Idee ist einfach:<\/p>\n<ul>\n<li><em>aus meiner ersten Liste werden die Dateinamen extrahiert, daf\u00fcr nehme ich regul\u00e4re Ausdr\u00fccke und dotNet Core hat daf\u00fcr alle Methoden parat.<\/em>\n<p><figure id=\"attachment_45\" aria-describedby=\"caption-attachment-45\" style=\"width: 525px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/Regexp-Search-VS-Code.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-45 size-large\" src=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/Regexp-Search-VS-Code-1024x685.png\" alt=\"\" width=\"525\" height=\"351\" srcset=\"https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Regexp-Search-VS-Code-1024x685.png 1024w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Regexp-Search-VS-Code-300x201.png 300w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Regexp-Search-VS-Code-768x514.png 768w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Regexp-Search-VS-Code.png 1865w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/a><figcaption id=\"caption-attachment-45\" class=\"wp-caption-text\">Mit der Suche von VS-Code lassen sich in Echtzeit die regul\u00e4ren Ausdr\u00fccke validieren, feine Sache<\/figcaption><\/figure><\/li>\n<li><em>Diese Dateiname- Liste als Parameter \u00fcbergeben, und rekursiv alle Verzeichnisse durchsuchen, dabei\u00a0jedes Mal mit dem Verzeichnis Inhalt\u00a0vergleichen.<\/em><\/li>\n<li><em>Ergebnisse werde ich in einer Tabelle sammeln (Key=Dateiname, Value=Pfad dahin) speichern.<\/em><\/li>\n<\/ul>\n<p>Ich bin kein C# Spezialist, aber bis auf den Hashtable, (der &#8222;Dictionary&#8220; hei\u00dft) findet man sich schnell zurecht. Das Einzige, was ich vermisse, ist ein automatischer Vorschlag f\u00fcr import (&#8222;using&#8220; in c#). Ist aber verschmerzbar.<\/p>\n<p>VS Code macht dabei eine echt gute Figur, schl\u00e4gt mir nach 2 bis 3 Buchstaben den richtige Begriff vor, so dass ich ich sogar schneller bin, als ich mit copy&amp;paste w\u00e4re, wie man es vom Handy eigentlich gewohnt ist.<br \/>\nBein Ausf\u00fchren ist es auch noch sehr schnell.<\/p>\n<p>270 von 300 Bilder habe ich wieder finden k\u00f6nnen. Ist schon ein guter Anfang!<\/p>\n<ul>\n<li>Bilder nach Google zur\u00fcck schicken: die gefundenen Bilder muss ich jetzt wieder in der Cloud speichern. Daf\u00fcr nutze ich einfach das Web-Frontend von Google-Photos, per drag and drop, ganz ohne Stress.<\/li>\n<li>F\u00fcr die Freigabe im Blog braucht aber Google kryptisch Links zu den Bildern.<br \/>\n<a href=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/Blogger-URL-Images.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-53 size-full\" src=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/Blogger-URL-Images.png\" alt=\"\" width=\"1017\" height=\"163\" srcset=\"https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Blogger-URL-Images.png 1017w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Blogger-URL-Images-300x48.png 300w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Blogger-URL-Images-768x123.png 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><br \/>\nDiese Links kann ich nur beziehen, wenn ich die neu importierten Bilder in einen Post einbaue. Alles kein Problem, ich erstelle einen Post mit den 270 Bildern, die ich frisch importiert habe. <a href=\"http:\/\/alb-steps.louvard.de\/2017\/03\/restored-images.html\">Es sind schon ein paar Perlen dabei<\/a><\/li>\n<li>Jetzt muss ich in alle Posts, alle falschen toten Links korrigieren. Ich probiere es kurz manuell und merke dass es keinen Wert hat! &#8230; Und jetzt?<\/li>\n<\/ul>\n<h6>Backup it!<\/h6>\n<p>Wie komme ich am besten an den Inhalt all meiner Blogs? Crawler? WGET? Wieder das gleiche Problem, wie am Anfang. Irgendwann, nach einer kleinen Jogging Runde,\u00a0komme ich auf die Idee, dass \u00a0ein Backup helfen k\u00f6nnte. Gibt es \u00fcberhaupt eine Backup Funktion im Blogger? Warum habe ich nie ein Backup gemacht? Wie konnte ich so doof sein?<\/p>\n<p>Viele interessante Fragen, aber auch Antworten! In der Tat, bietet <a href=\"https:\/\/support.google.com\/blogger\/answer\/41387?hl=de\">Blogger eine Backup Funktion<\/a>, leider nicht f\u00fcr Bilder, aber die Textinhalte lassen sich auf einen Schlag in einer XML-Datei exportieren, und wieder importieren!<\/p>\n<p>Mehr brauche ich nicht, um weiter vorw\u00e4rts kommen zu k\u00f6nnen!<\/p>\n<ul>\n<li>Aus der Backup-Datei muss ich noch alle toten Links ermitteln, daf\u00fcr kann mein Skript eine Verbindung aller Links erstellen und dabei erfahre ich, ob das Bild vorhanden ist oder. Dabei habe ich sogar einen Schritt mehr automatisiert!<\/li>\n<li>VS Code und ausgefeilte regul\u00e4re Ausdr\u00fccke helfen, um in der XML-Datei die toten Links durch korrekte Links zu ersetzen.<\/li>\n<li>Dabei musste ich noch ber\u00fccksichtigen, dass die Bilder in verschiedenen Gr\u00f6\u00dfen angezeigt werden und dass diese Gr\u00f6\u00dfe URL kodiert ist.<\/li>\n<li>Die Spannung steigt und als ich meine korrigierte Backup-Datei zur\u00fcckspiele, kann ich mich richtig freuen! Die 270 Bilder sind wieder da!<\/li>\n<\/ul>\n<h6>Restarbeit<\/h6>\n<figure id=\"attachment_47\" aria-describedby=\"caption-attachment-47\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/Just-30Pictures-Missing.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-47 size-medium\" src=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/Just-30Pictures-Missing-300x229.png\" alt=\"\" width=\"300\" height=\"229\" srcset=\"https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Just-30Pictures-Missing-300x229.png 300w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Just-30Pictures-Missing-768x587.png 768w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Just-30Pictures-Missing-1024x782.png 1024w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Just-30Pictures-Missing.png 1555w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-47\" class=\"wp-caption-text\">Sieht schon viel besser aus &#8230;<\/figcaption><\/figure>\n<figure id=\"attachment_46\" aria-describedby=\"caption-attachment-46\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/Filename-With-Spaces.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-46 size-medium\" src=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/Filename-With-Spaces-300x201.png\" alt=\"\" width=\"300\" height=\"201\" srcset=\"https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Filename-With-Spaces-300x201.png 300w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Filename-With-Spaces-768x514.png 768w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Filename-With-Spaces-1024x685.png 1024w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Filename-With-Spaces.png 1865w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-46\" class=\"wp-caption-text\">Noch 30 Dateien, mit Leerzeichen oder sonstiger Endung.<\/figcaption><\/figure>\n<p>Jetzt bleibt zu kl\u00e4ren, warum noch 30 Bilder vermisst werden, nach einer tieferen Analyse kommt folgendes heraus:<\/p>\n<ul>\n<li>Es gibt nicht nur &#8222;.jpg&#8220;, aber auch &#8222;.jpeg&#8220; und &#8222;.png&#8220; Bilder<\/li>\n<li>Bilder mit Leerzeichen werden nicht korrekt gefunden (die Menschheit wird autonom fahren, bevor die Informatiker ohne Leerzeichen Problematik leben k\u00f6nnen)<\/li>\n<\/ul>\n<p>Beide Probleme k\u00f6nnen mit angepasstem regul\u00e4r Ausdruck und URL-Unescape gel\u00f6st werden.<\/p>\n<figure id=\"attachment_49\" aria-describedby=\"caption-attachment-49\" style=\"width: 525px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/GIT-Compare-Regexp.png\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-49 size-large\" src=\"http:\/\/commitnrun.louvard.de\/wp-content\/uploads\/2017\/03\/GIT-Compare-Regexp-1024x685.png\" alt=\"\" width=\"525\" height=\"351\" srcset=\"https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/GIT-Compare-Regexp-1024x685.png 1024w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/GIT-Compare-Regexp-300x201.png 300w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/GIT-Compare-Regexp-768x514.png 768w, https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/GIT-Compare-Regexp.png 1865w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/a><figcaption id=\"caption-attachment-49\" class=\"wp-caption-text\">GIT Anbindung mit VS-Code<\/figcaption><\/figure>\n<p>Nochmal alles laufen lassen:<\/p>\n<ul>\n<li>Aus der Backup Datei alle falsch verlinkten Bilder suchen<\/li>\n<li>Dateiname in der Ablage suchen<img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-43\" src=\"https:\/\/www.louvard.de\/CommitNRun\/wp-content\/uploads\/2017\/03\/Bildschirmfoto-2017-03-11-um-12.04.48.png\" alt=\"\" width=\"193\" height=\"41\" \/><\/li>\n<li>Bilder in Google importieren und im <a href=\"http:\/\/alb-steps.louvard.de\/2017\/03\/restored-images.html\">Auflistungs Post<\/a> hinzuf\u00fcgen<\/li>\n<li>Neue Bilder-Links in der XML Datei austauschen<\/li>\n<li>Alle Posts l\u00f6schen (!)<\/li>\n<li>Einmal G\u00e4nsehaut bekommen und korrigierte Backup-Datei importieren<\/li>\n<\/ul>\n<p>Ja! <a href=\"http:\/\/alb-steps.louvard.de\/\">Alle Bilder sind da<\/a>! Was f\u00fcr eine Freude!<\/p>\n<h2>Fazit<\/h2>\n<p>Wer kein Backup macht, geht davon aus aus, dass die Daten tempor\u00e4r gelagert sind und gibt den Daten kein Wert. Das wei\u00df ich, und ich hatte untersch\u00e4tzt, wie einfach die Bilder weggehen k\u00f6nnen. Hatte gedacht, dass google alles f\u00fcr mich zwei Mal absichert, ohne mir wirklich Gedanken dar\u00fcber gemacht zu haben.<\/p>\n<p>Es war ein langer Weg, aber dabei konnte ich bei jeder Etappe etwas lernen, daf\u00fcr war es mir den ganze Umstand wert!<\/p>\n<p>Mein Blog hat, f\u00fcr mich, an Wert gewonnen und ich konnte feststellen, wie wichtig es ist, f\u00fcr mich meine Erfahrungen zusammen zu fassen.<\/p>\n<p>Visual Studio Code und dotNet Core sehen vielversprechend aus, und f\u00fcr einen IT Spezialisten, der 16 Jahre lang gern ohne Microsoft Technologie bestens zurecht gekommen ist, ist es ein Kompliment \u00a0an Microsoft.<\/p>\n<p>Der gesamte code kann in <a href=\"https:\/\/github.com\/cfdd73\/Restore-Blog-Images\">GitHub gelesen werden<\/a>.<\/p>\n<p>Danke f\u00fcr&#8217;s Lesen und bis bald,<br \/>\n\u00c9ric<\/p>\n<p>PS: Backup nicht vergessen!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vorher lesen:\u00a0Gesichert und verschwunden! Files, Streams und Maps Jetzt dass das Ausma\u00df des Desasters bekannt ist, kann die Rettung begonnen werden. Daf\u00fcr werde ich keinen Plan machen, sondern Schritt f\u00fcr Schritt vorgehen. Die Liste aller vermissten Bilder, oder besser gesagt 300 davon, habe ich schon. Ich werde also versuchen, diese Bilder in meiner Ablage (NAS) &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.louvard.de\/CommitNRun\/?p=34\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eRettung mit core\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=\/wp\/v2\/posts\/34"}],"collection":[{"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=34"}],"version-history":[{"count":20,"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":72,"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions\/72"}],"wp:attachment":[{"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.louvard.de\/CommitNRun\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}