[Gelöst] optimierte Dateien aus ursprüngliche Ordnerstruktur überschreiben

Status
This thread has been solved! Go to solution…

mibro

kennt sich schon aus
Hallo,
über die Suchfunktion kann ich alle Bilddaten ab einer definierten Größe in ein fileContainer exportieren.
Danach optimiere ich alle Bilddaten über ein Tool an.

Nach der Anpassung müssten alle Bilder wieder in die gleiche Ordnerstruktur.
Diese ist leider teilweise sehr tief.

Gibt es im freecommander eine Funktion mit dem ich die Dateiorte vor dem einfügen suchen kann, um danach alle Dateien zu überschreiben.
Ziel ist es das alle optimierten Dateien im ursprünglichen Verzeichnis abgelegt werden.

Danke vorab für die Hilfe.

mfg
Michael
 
Moin Michael,

wenn du die Dateien nach der Suche in einen Dateicontainer exportierst, zeigt der FreeCommander diese nur in einem solchen an.
Die Dateien, die du dort siehst, sind aber keine Kopien, sondern nach wie vor die Dateien an den ursprünglichen Orten. Wenn du in dem Dateicontainer mal eine Datei selektierst und genau hinsiehst, wirst du feststellen, dass unter dem Dateicontainer auch der Pfad der Datei angezeigt wird.

Wenn du also eine Datei aus diesem Dateicontainer heraus mit deinem Tool öffnest und optimierst, hast du nicht etwa eine Kopie geändert, sondern bereits die originale Datei am ursprünglichen Ort.

Gruß Thomas
 
Zuletzt bearbeitet:
Hallo Thomas, danke für Deine Antwort.
Das wäre schön, wenn das so funktionieren würde.
Ich optimiere die Dateien mit tinypng die Dateien werden per zip-Ordner abgespeichert und entpackt.
Wie muss ich nun vorgehen damit der freecommander die Dateien wirklich überschreibt?

Damit Du alles nachvollziehen kannst hier eine ausführlichere Erklärung.
Die Ordnerstruktur kommt von Shopware.
Somit müssen die optimierten Bilder zwingend wieder am gleichen Platz überschrieben werden.

Die Suche inkl. aller Unterordner stellt kein Problem dar. Das macht freecommander und viele anderen Tools zuverlässig.

Ich suche alle Dateien die größer als 1MB sind. Danach exportiere ich diese Dateien in einen temporären Filecontainer um die Dateien im nächsten Schritt zu optimieren.

Auch wenn ich diese Dateien in den FileContainer vom freecommander verschiebe, so werden die Dateien vom ursprünglichen Verzeichnis nicht überschrieben. Die Dateien werden hinzugefügt mit einem anderen Speicherort.

Aus diesem Grund suche ich nach einem Lösungsansatz für folgende Funktion.

Suche den Dateinamen der zu überschreibenden Datei in allen Verzeichnissen und überschreibe die komplette Datei.

Die Suche soll im Media-Ordner beginnen.

Hier ein Beispiel für die Ordnerstruktur

media\image\f7\02\d4\originalbilder in jpg oder png

Vielleicht geht es auch mit PowerShell. Leider habe ich bei diesem Thema zu wenig Kenntnisse.
Dieses Skript hatte leider nicht funktioniert.

$sourceFolder = "C:\optimierte_bilder"

$destinationFolder = "C:\shopware\media"



Get-ChildItem -Path $sourceFolder -Recurse -Filter *.jpg, *.png | ForEach-Object {

$destinationPath = $_.FullName.Replace($sourceFolder, $destinationFolder)

Copy-Item $_.FullName $destinationPath -Force

}

Mit freundlichen Grüssen
Michael
 
Dieses Skript hatte leider nicht funktioniert.
Code:
$sourceFolder = "C:\optimierte_bilder"
$destinationFolder = "C:\shopware\media"

Get-ChildItem -Path $sourceFolder -Recurse -Filter *.jpg, *.png | ForEach-Object {
  $destinationPath = $_.FullName.Replace($sourceFolder, $destinationFolder)
  Copy-Item $_.FullName $destinationPath -Force
}
Dieses Skript ist nicht nur fehlerhaft, sondern für deinen Zweck auch vollkommen ungeeignet.

Das Skript würde ledigllich Dateien von einem Quellort an einen Zielort kopieren - jedoch erlaubt der Filter
-Parameter von Get-ChildItem nur ein Argument und scheitert somit ohnehin.
Darüber hinaus müsste im Zielverzeichnis die selbe Ordnerstruktur vorhanden sein.

Eine suche nach dem Dateinamen im Zielverzeichnis, wie von dir gewünscht, fehlt somit komplett.

Suche den Dateinamen der zu überschreibenden Datei in allen Verzeichnissen und überschreibe die komplette Datei.
Ich hoffe, dir ist bewusst, dass dann im Zielverzeichnis nicht mehrere Dateien mit selben Namen liegen dürfen, sonst überschreibst du nämlich alle mit derselben Datei.

So sollte es funktionieren:
Code:
# Quell- und Zielordner
$Source = "C:\optimierte_bilder"
$Target = "C:\shopware\media"

# Bei Fehlern Aktion stoppen
$ErrorActionPreference = 'stop'

# Für jede JPG- & PNG-Datei im Quellordner...
Foreach ($SourceIMG in Get-ChildItem -recurse "$Source\*" -include *.jpg, *.png) {
 
  # Für jede Datei im Zielverzeichnis mit gleichem Namen...
  Foreach ($TargetIMG in Get-ChildItem -recurse "$Target\$($SourceIMG.Name)") {
   
    # Überschreibe Zieldatei mit Quelldatei
    try {
      Write-Host -NoNewLine ('Kopiere "{0}" nach "{1}"... ' -f $SourceIMG.Name,$TargetIMG.Fullname)
      Copy-Item -Force -Path $SourceIMG.Fullname -Destination $TargetIMG.Fullname
      Write-Host -F green "ok. "
    } catch {Write-Host -f red $_.Exception.Message}
   
  }# Ende Foreach TargetIMG
}# Ende Foreach SourceIMG
""
if ($Error) {Write-Host -N "--- Beliebige Taste zum Beenden ---";[console]::ReadKey($true)}
else {5..1 |%{Write-Host -N "`r--- Alles erledigt. Wird beendet in $_ Sekunden ---";sleep 1}}

ok, Danke.
Die Inhalte waren aber von mir...
Der Thread war doch von @MikeStb - oder ist das dein 2ter Account? Dann verstehe ich die Aussage nicht:
Hallo, das würde mich auch interessieren.

Gruß Thomas
 
Hallo Thomas, danke für den Code!
Ich bin gespannt auf das Ergebnis.
Vor dem Start werde ich alle Unterverzeichnisse auf doppelte Dateinamen prüfen lassen.

mfg
Michael
 
Was genau optimierst du eigentlich an den Bildern?
Ich suche alle Dateien die größer als 1MB sind.
Willst du die Dateigröße verkleinern?

Die meisten Sachen könnte man mit ImageMagick auch gleich mit automatisieren, dann bräuchtest du zum einen ggfs. das andere Tool gar nicht mehr, zum anderen könnte man sich das Ganze "Suche nach Dateinamen im Zielordner.. " gedöns sparen - weil man die Dateien direkt vom FreeCommander aus ans Skript übergeben und somit direkt die Dateien am Ursprungsort ändern könnte.

Gruß Thomas
 
schaue ich mir an und vergleiche die Bildqualität mit tinypng.
Wenn ImageMagick png und jpg gut verarbeiteitet, dann spricht auch nicht gegen diese Lösung.
Ich melde mich nochmals, wenn ich alles geprüft habe.

Gruß
Michael
 
Hallo Thomas,
ich habe gerade ImageMagick 7.1.1-6 Q16-HDRI (64Bit) (2023-04.2023) und GPL Ghostscript 10.01.1 installiert.
Hast Du eine Idee welchen Befehl ich eingeben muss, damit ImageMagick ähnliche Ergebnisse liefert wie tinypng?

Wie kann ich die gefundenen großen Bilddateien direkt vom freecommander (FileContainer) an das ImageMagick-Skript übergeben?

Gruß
Michael
 
Moin,

Ich bin gerade noch nicht Zuhause und habe das jetzt mal auf dem Handy runtergetippt - ist also noch ungetestet:
Code:
[CmdletBinding()]Param(
  [parameter(ValueFromRemainingArguments)][io.FileInfo[]]$Files
)

Foreach ($File in $Files) {
  switch ($File.Extension) {
    ".jpg" {
      magick $File.Fullname -interlace Plane -gaussian-blur 0.05 -quality 80% $File.Fullname
    }
    ".png" {
      magick $File.Fullname -colors 255 -type optimize -type PaletteAlpha $File.Fullname
    }
  }
}

Im FreeCommander unter "Extras > Programmfavoriten> Programmfavoriten definieren"
Eine neue Leiste anlegen, dann einn neuen Eintrag anlegen.
  • Bei Programm/Ordner Powershell
  • Bei Parameter -EP ByPass -NoLogo -NoProfile -File "C:\Pfad\zum\Skript.ps1" %ActivSel% (Skriptpfad muss natürlich angepasst werden)
Nach Wunsch Icon und Tastenkombi vergeben.

Fortan kannst du dann im Dateicontainer Dateien selektieren und den Programmfavoriten ausführen.

Gruß Thomas
 
Zuletzt bearbeitet:
oh man bist Du schnell. (y)
Ich warte aber mal, bist Du wieder zu Hause bist um den Code zu testen.
Vielen lieben Dank für die schnelle Reaktion:)
 
Also... funktionieren tut es so schon mal.

Kopiere am besten mal ein paar Bilder in einen Testordner, lass das Skript drüber laufen und gucke, ob du mit dem Resultat zufrieden bist oder ob man da noch ein wenig nachjustieren muss.

Gruß Thomas
 
Guten Morgen Thomas, ja das mache ich heute Abend. Ich bin gespannt auf das Ergebnis.
Wie gehe ich beim freecommander am optimalsten vor, um doppelte Dateien in einer tiefen Ordnerstruktur zu finden?
Also Suche mir alle doppelten Dateinamen inkl. Dateierweiterung jpg und png.

Gruß Michael
 
das hatte ich gemacht. Seltsamer Weise kommen zu viele Ergebnisse.
doppelten Dateien suchen ist im Reiter Duplikate aktiviert und im Reiter Attribute habe ich Ordner deaktiviert.

Vermutlich prüft die aktuelle Sucheinstellung nicht den kompletten Dateinamen.

Gruß Michael
 
Das war teilweise die Ursache.
Aber auch das ich nicht auf das komplette Suchergebnis gewartet habe. Bevor die Suche nicht komplett beendet ist, kommen auch Dateien im Suchfenster die eigentlich nicht zur Sucheinstellung passen.
Jetzt geht es und ich finde sehr wenig Duplikate.
Somit prüfe ich jetzt nur noch ob ImageMagick gleichwertige Ergebnisse wie tinypng.
ImageMagick ist sehr umfangreich aber setzt sehr viel Wissen voraus.

Gruß Michael
 
Status
This thread has been solved! Go to solution…
Oben