Doppelte Dateien nach Datenrettung

Rockhound

Lt. Commander Pro
Registriert
Jan. 2003
Beiträge
1.602
Hallo,

ein externes Gehäuse hat "versagt" und mir eine Festplatte im RAW Zustand hinterlassen.
Mit Wondershare Recoverit hab ich alle Daten wieder herstellen können. Leider sind die Dateien nun immer doppelt vorhanden:

  • Dateiname.jpg (lässt sich nicht öffnen)
  • dateiname_1.jpg (lässt sich öffnen)

Das gilt für alle Dateien. Tausende Dateien die ein Teil von Medienprojekten sind.

Kennt jemand eine Methode wie ich mittels Skript/Programm:
a. Alle Dateien ohne _1 (am Ende des Dateinamens) lösche und gleichzeitig die Dateien mit _1 umbenenne?

Danke & Gruß
Daniel

PS: Lösung hier: https://www.computerbase.de/forum/threads/doppelte-dateien-nach-datenrettung.2148549/post-28319527
 
Zuletzt bearbeitet:
Code:
$directory = "Pfad/zum/Verzeichnis"

Get-ChildItem $directory | ForEach-Object {
    if ($_.Name -notlike "*_1.*") {
        # Datei löschen
        Remove-Item $_.FullName -Force
    }
    else {
        # Datei umbenennen
        $newName = $_.Name -replace "_1", ""
        $newPath = Join-Path -Path $_.DirectoryName -ChildPath $newName
        Rename-Item $_.FullName -NewName $newName -Force
    }
}

Ersetze den Pfad "Pfad/zum/Verzeichnis" durch den tatsächlichen Pfad zu dem Verzeichnis, in dem du die Dateien ändern möchtest.

Wichtig, vorher ein Backup machen.

CU
redjack
 
  • Gefällt mir
Reaktionen: Rickmer
Mit Advanced Renamer kann man so was umbennen.

Ich würde zunächst alle intakten Dateien auf eine andere Festplatte kopieren. Das sollte mit Boardmitteln möglich sein, suchen nach "_" und kopieren.

Dann auf dem anderen Medium mit Advanced Renamer alle Dateien umbenennen.
Dann alles auf Vollständigkeit prüfen und von diesen Daten eine weitere Kopie auf einer weiteren Festplatte anlegen.

Dann erst die ursprüngliche Festplatte komplett formatieren und eine Fehlerüberprüfung starten, ob sie wirklich noch 100% in Ordnung ist.
 
@redjack1000 Ich würde den Code in zwei Ausführbare spalten
Erst alles ohne _1 löschen, das prüfen, und dann erst alles umbenennen

Sonst bricht das Skript irgendwie mittendrin ab, man führt es nochmal aus und schon sind die Hälfte der Dateien die schon umbenannt wurden futsch :D
 
  • Gefällt mir
Reaktionen: redjack1000
Das Script von @redjack1000 ist ein guter Ansatz aber ich würde es nicht so nutzen.

1. Der Suchausdruck _1. ist schlecht gewählt, außerdem wird über den gesamten Namen gesucht.
2. Wird einfach gelöscht, ich würde die vorher alle verschieben und nicht löschen.
3. Beim Umbenennen, was passiert denn wenn es die Dateien dann schon gibt? Es könnte ja auch Dateien geben die _2 _3 usw. heisen bzw. im Originalnamen tragen. Oder was machst du wenn das Original z.B. dann mal kein _1 hat?
 
  • Gefällt mir
Reaktionen: Rickmer, redjack1000 und moneymaker4ever
Danke für Eure Hilfe.

Ja es müsste schon immer nur am Dateiende die _1 gesucht werden. Nennt sich eine Datei "Seite_13-14_Text.pdf" wird diese ja auch gelöscht.

Und ein Problem hab ich auch noch:
Die defekte Datei mit dem Originalnamen hat Groß- und Kleinbuchstaben, die korrekte Datei hat nur Kleinbuchstaben mit _1 am Ende. Wie kann man denn sowas lösen? Man müsste ja
1. die Dateien der Größe nach als Duplikat erkennen
2. die Datei ohne _1 am Ende löschen
3. und dabei aber deren Namen übernehmen für die Datei mit _1 am Ende.
 
Rockhound schrieb:
Die defekte Datei mit dem Originalnamen hat Groß- und Kleinbuchstaben, die korrekte Datei hat nur Kleinbuchstaben
Wäre es schlimm, wenn der Dateiname in Kleinbuchstaben bleibt oder willst Du die Groß- und Kleinbuchstaben wieder herstellen?

Mit Adanced Renamer kann man sich auch eigne Regeln skriptartig zusammenbauen. Da sollte es möglich sein, zumindest den ersten Buchstaben des Dateinamens wieder groß zu bekommen.

Der Vorteil von Adanced Renamer gegenüber einen Skript ist die Vorschaufunktion. Man kann sich eine Umbennenungsregel definieren und sieht dann in der Vorschau die neuen Dateinamen aller Dateien, die umbenannt werden sollen. Erst wenn das alles passt, startet man den Job.
 
Die Dateien sind teil von Premiere, After Effects, DaVinci oder Blender Projekten. Bei Blender hab ich gemerkt das es nix ausmacht wenn alles kleingeschrieben ist. Bei den anderen muss ich mal schauen ob die Case-Sensitive sind.

@redjack1000 Danke für Dein Skript, leider werden Unterordner einfach mit gelöscht wenn diese kein "_1" im Ordnernamen haben. Wünschenswert wäre ja das das Skript rekursiv arbeitet und dabei die OrdnerNAMEN ignoriert. Diese sind alle Tip Top.
 
Hab mal kurz reingeschaut, der Advanced Renamer bietet auch einige Werkzeuge zur Veränderung der Schreibung

art.jpg
 
Rockhound schrieb:
Wie kann man denn sowas lösen?
Reguläre Ausdrücke, Advanced Renamer benutzt nix anderes.
calippo schrieb:
Der Vorteil von Adanced Renamer gegenüber einen Skript ist die Vorschaufunktion.
Man kann Scripte auch interaktiv gestalten oder zumindest so das es bei Problemen eine alternative Funktion gibt.
 
  • Gefällt mir
Reaktionen: LadykillerTHG
Mein Gehirn packt RegEx nicht. Deshalb frag ich auch nach Hilfe :-)

[Lösung]
  1. Ich wähle in AllDup den Ordner (inkl. Unterordner aus)
  2. Suchmethode: Dateigröße
  3. Bei den Suchergebnissen wähle ich die Markierung: "Nur die erste Datei in allen Gruppen auswählen"
  4. Im Dateimanager wähle ich bei Aktion: "Dateien in einen Sicherungsordner verschieben" und wähle einen anderen/neuen Ordner (weiter im Text OrdnerB genannt) aus. Wichtig: Haken dran bei: "Dateien mit Ihrer Ordnerstruktur im Sicherungsordner speichern".
  5. Optional: Ich nutze ein Skript um im OrdnerA alle thumbs_1.db und _1.ds_store Dateien zu löschen.
  6. In Total Commander (TC) wähle ich im 1. Fenster den neu erstellten OrdnerB aus und gehe auf Befehle > Suche in separatem Prozess aus" > Suche starten > anwenden.
  7. Im 1. Fenster hab ich nun eine Liste mit allen gefunden Dateien und Ordnern. Ich wähle alle aus STRG+A und STRG+M zum umbenennen.
  8. Im Mehrfach-Umbenenn-Tool auf ein kleines Icon (Registerkarte mit Linien) > Namen bearbeiten. Daraufhin erscheint Notepad mit einer Liste alles Ordner und Dateinamen. Die Liste speichere ich mir ab.
  9. Im 2. Fenster von TC öffne ich den OrdnerA und gehe gleich vor: Befehle > Suche in separatem Prozess > Suche starten > anwenden.
  10. Im 2. Fenster ist nun die Liste mit allen Ordnern/Dateien von Ordner A. Ich wähle wieder alle aus mit STRG+A und mit STRG+M ins Mehrfach-Umbenenn-Tool. Dort lade ich nun die zuvor erstellte Liste wieder über das kleine Icon > Name aus Datei laden... > Start!
Hab das jetzt mit ein paar Ordner ausprobiert und scheint gut zu klappen. Da es sich um tausende Dateien (18TB) handelt, werde ich Schritt für Schritt vorgehen. AllDup vergleicht ja nicht Dateien die sich im selben Ordner befinden, sondern alle gefundenen Dateien. Man kann bei AllDup noch zusätzliche Vergleichsmethoden nutzen. Dateiendung ist ja immer gleich und die ersten Zeichen im Dateinamen auch. So wird es dann denke ich noch sicherer.

Hier noch das Powershell Skript welches ich genutzt habe um die Dateien zu löschen. Das war bei mir wichtig, da diese nicht korrekt verschoben worden sind oder als Duplikate erkannt wurden. Deshalb hatte ich dann in TC eine Liste von Dateinamen die nicht mit den Suchergebnissen von OrdnerA übereinstimmten.

PowerShell:
Remove-Item "Z:\recover\" -include "thumbs_1.db" -recurse -force
Remove-Item "Z:\recover\" -include "_1.ds_store" -recurse -force
 
Zuletzt bearbeitet:
sikarr schrieb:
Man kann Scripte auch interaktiv gestalten oder zumindest so das es bei Problemen eine alternative Funktion gibt.
Na klar kann man das. Kommt halt darauf an, wie oft man Skripte benötigt und wie viele andere ähnliche Anwendungsfälle man hat und wie viel Spaß man an Coding grundsätzlich hat.

Am Ende taucht man ganz tief ein, packt noch ne GUI darum, denkt sich einen Namen aus und verkauft das als Tool wie den Advanced Renamer.

Ich bin davon ausgegangen, der der TE ne schnelle Lösung für sein Problem sucht, da scheint mir ein einfaches Tool geeignet zu sein.
 
Rockhound schrieb:
Danke für Dein Skript, leider werden Unterordner einfach mit gelöscht wenn diese kein "_1" im Ordnernamen haben. Wünschenswert wäre ja das das Skript rekursiv arbeitet und dabei die OrdnerNAMEN ignoriert.
Bitteschön.

Definiere mal "vollständig" was du möchtest, ich habe keine Lust, bröckchenweise das Skript zu ändern.


CU
redjack
 
  • Gefällt mir
Reaktionen: Rockhound
Ich habe ja schon eine Lösung für mich gefunden.
Aber hier nochmal was Dein Skript bei mir gemacht hat.

Ordnerstruktur vor deinem Skript

- OrdnerA
-- DateiA.jpg
-- DateiA_1.jpg
-- DateiB.jpg
-- DateiB_1.jpg
-- OrdnerB
-- DateiC.jpg
-- DateiC_1.jpg

Ordnerstruktur nach deinem Skript

- OrdnerA
-- DateiA_1.jpg
-- DateiB_1.jpg

Er hat also den Unterordner "OrdnerB" gelöscht und alle Dateien darin.

Gruß
 
  • Gefällt mir
Reaktionen: redjack1000
@redjack1000 was macht deine $newPath Variable, die wird nirgends benutzt?

calippo schrieb:
Na klar kann man das. Kommt halt darauf an, wie oft man Skripte benötigt und wie viele andere ähnliche Anwendungsfälle man hat und wie viel Spaß man an Coding grundsätzlich hat.

Am Ende taucht man ganz tief ein, packt noch ne GUI darum, denkt sich einen Namen aus und verkauft das als Tool wie den Advanced Renamer.
Du missverstehst mich, die Erwähnung des Tools ist jetzt keinesfalls ein Fehler. Aber mit interaktiver meinte ich das man dafür sorgt das z.B. bei einem Konflikt das Script pausiert, die Schleife abricht oder selber eine Umbenennung durchführt bis der Konflikt nicht mehr besteht. Das erfordert nur minimal mehr Zeilen Code kann einem aber den Arsch retten.

Gerade wenn ich sowas über eine unbekannte Anzahl an Files laufen lasse und ich diese auch brauche will ich mir nicht alles gleich kaputt machen.
calippo schrieb:
Ich bin davon ausgegangen, der der TE ne schnelle Lösung für sein Problem sucht, da scheint mir ein einfaches Tool geeignet zu sein.
Ist aber je nach Dateianzahl ziemlich aufwendig und fummelig
Rockhound schrieb:
Ich habe ja schon eine Lösung für mich gefunden.
Schön, hier noch mein Ansatz auch wenn es wohl jetzt nicht mehr nötig ist.
PowerShell:
$directory = "Pfad\zum\Ordner"
$Backupfolder = "Pfad\für\Backup"

Set-Location $directory

$files = Get-ChildItem $directory -Recurse -File | Where-Object {$_.BaseName -match ".*_1$"}

foreach ($val in $files){

    $NewName = $val.BaseName.trimend("_1") + $val.Extension

    $PossibleSameFile = Join-Path $val.DirectoryName $NewName
    $GetOldSubFolder = $val.DirectoryName.Replace("$directory","")
    $Backup = Join-Path $Backupfolder $GetOldSubFolder

    If(!(Test-Path $Backup)){
        New-Item -Path $Backup -ItemType Directory
    }

    IF (Test-Path $PossibleSameFile){
        Move-Item $PossibleSameFile $Backup
        Rename-Item $val.FullName -NewName $newName
    }else{
        Rename-Item $val.FullName -NewName $newName
    }
}
das Script filtert alle Dateien, auch in Unterordnern nach _1 am Ende und Testet ob eine Datei ohne _1 bereits da ist. Falls Ja wird diese verschoben und die andere Umbenannt ansonsten wird nur umbenannt.

Sollte man so noch mal Rückgriff brauchen hätte man die Dateien noch ansonsten kann man die Ordner einfach löschen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Rockhound
sikarr schrieb:
Ist aber je nach Dateianzahl ziemlich aufwendig und fummelig
Ja stimmt, im Advanced Renamer ist ein Limit von 25.000 Files voreingestellt. Kann man wohl ändern, dann wird es ggf. langsamer (was ja eigentlich seltsam ist, weil das ja per Batchjob passiert)

Ich müsste bei 100.000 Dateien dann vier mal den Job starten, das wäre noch ok. Bei einer Million an Dateien und 40 Einzeljobs ist es nicht mehr handhabbar.
 
Hallo,
ich möchte noch als letzte Info durchgeben:

  • Die Datensicherung mit Wondershare hat EWIG gedauert.
  • Es hat mit dem umbenennen usw.. nicht geklappt. Nicht mit den Skripts usw...
  • Ich hab dann weiter gesucht nach anderen Programmen. Eines hat dann tadellos und super schnell funktioniert: R-Studio Technician.
Nochmals Danke für Eure Anregungen und Hilfe.
 
Zurück
Oben