Shopware Umzug - Dateien mit Umlauten

Weiß zufällig jemand wie man beim Datentransfer zwischen zwei Servern am besten mit Umlauten umgeht?
Wir haben gerade einen Shop bei dem viele Bilder ein „ü“ (…blüte.jpg) haben.
Egal ob ich die Daten per SSH rsync oder scp verschicke, zippe und dann auf dem Zielserver entzippe,…die Dateien werden immer umbenannt…nur wenn ich die Dateien „einzeln“ über FileZilla hochlade, klappt es - aber das ist bei mehr als 500 Bildern in diversen Ordnern etwas „aufwendig“.

Jemand eine Idee oder Anleitung wie das mit den Datenübertragungen am besten abläuft?

Das liegt in der Regel daran, dass beide Server unterschiedliche Zeichensätze haben, du kannst dir mal den Paramenter -iconv von rsync anschauen, damit kannst du vorher definieren von welchem Zeichensatz zu welchem Zeichensatz konvertiert werden soll.

Als angemessene Bestrafung für solche Dateinamen sollte man die Bilder Pixel für Pixel manuell übertragen müssen :joy:

Falls alle Stricke reisen, über die Konsole per Bash Script nach Dateinamen mit Sonderzeichen suchen und dann automatisch umbenennen.

Aber das mit dem Zeichensatz im vorherigen Kommentar hört sich sehr zielführend an.

1 „Gefällt mir“

Oh super! Das war schon mal ein guter Hinweis.

Jetzt weiß ich schon mal das der Quellserver ANSI_X3.4-1968 und der Zielserver UTF-8 benutzen.
Dann muss ich mir nur noch ein wenig Wissen über das -iconv aneignen ^^

Soweit ich es verstehe müsste es wie folgt aussehen:

rsync -av --iconv=ANSI_X3.4-1968,utf-8 Quelle Ziel

Kann das jemand bestätigen oder korrigieren? Wäre echt nett :slight_smile:

@Max_Shop leider kommt sowas hin und wieder mal vor. ^^ Kannst du mir das mit dem Bash Script erkäutern? Ich würde diese Dateien so oder so mal gerne umbenennen.

Mit dem Parameter „–dry-run“ oder kurz „-n“ kannst du es simulieren ohne das wirklich etwas übertragen wird.

Häää? Was ist daran aufwendig, wenn man im FileZilla mehrere Dateien oder sogar Ordner markiert und hochlädt? 500 Bilder ist in sehr wenigen Minuten erledigt :slight_smile:

Keine Ahnung, ich stelle mich gerade etwas blöd an. Die Bilder machen mir eigentlich weniger sorgen, das war mein erster Schritt auf der Suche nach einer Lösung. Ich habe gerade allgemein Probleme.

Das ist schon der 5te Shop den ich „umziehe“ und ich bekomme es einfach nicht hin.

Beim übertragen der Daten via SSH kommt folgende Fehlermeldung:
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1333) [sender=3.2.3]

Beim übertragen der Datenbank diese:

`ERROR 1452 (23000) at line 250154: Cannot add or update a child row: a foreign key constraint fails (`werbemittelshopsql1`.`#sql-alter-382-141d8`, CONSTRAINT `fk.document.order_id` FOREIGN KEY (`order_id`, `order_version_id`) REFERENCES `order` (`id`, `version_id`) ON UPDATE CASCADE)`

Beim Plugin Tools wird mir noch folgendes angezeigt:

Cannot check security.json from shopware-static-data (not accessible)
Security Updates (releases.json not accessible)

Und der Reiter Cache bei Tools lädt überhaupt nicht :sweat_smile:

Mein Gefühl sagt mir: Entweder der Shop oder Quellserver haben einen schaden lol

Ich war gerade etwas faul und habe ChatGPT benutzt. Aber du solltest mit dem Code zumindest das Prinzip verstehen:

#!/bin/bash

# Function to slugify a string
slugify() {
    echo "$1" | iconv -f utf-8 -t ascii//TRANSLIT | sed -E 's/[^a-zA-Z0-9]+/-/g' | sed -E 's/^-+|-+$//g' | tr A-Z a-z
}

# Function to process files in the directory
process_files() {
    local dir="$1"
    local files=$(find "$dir" -type f -iregex '.*\.\(jpg\|jpeg\|png\|gif\|bmp\|svg\|tif\|tiff\|ico\)')
    
    for file in $files; do
        filename=$(basename "$file")
        dirpath=$(dirname "$file")
        new_filename=$(slugify "$filename")
        
        # Check if filename needs to be changed
        if [[ "$filename" != "$new_filename" ]]; then
            mv "$dirpath/$filename" "$dirpath/$new_filename"
            echo "Renamed: $filename -> $new_filename"
        fi
    done
}

# Main script
read -p "Enter directory path: " path

if [ ! -d "$path" ]; then
    echo "Error: Directory not found."
    exit 1
fi

process_files "$path"

echo "Finished processing."

Anstatt die Bilder direkt umzubenennen, den Part mit einem Shopware API-Request ersetzt, damit Shopware die Bilder selbst umbenennt und das auch in der Datenbank ändert.

Super! Danke dir. Damit sollte ich klar kommen ^^