• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved]Dateinamen in einer Mapping-Datei +Ordner bereinigen

dma67

Hacker
Hallo zusammen,
ich kämpfe hier mit aberhunderten von Icons und bräuchte Eure Hilfe.

Teil 1

Ich möchte in einer Mapping-Datei mit ca 1600 Zeilen die Dateinamen korrigieren.

Beispiel:

Code:
ressources/swingclient/Dialog/SearchDialog/Edit/Symbol_Edit24x24.png => ressources/swingclient/icons/24x24/Symbol_Edit24x24.png
ressources/swingclient/Toolbar_Menubar/FavoriteGroup/Folder_1_Favorite.png => ressources/swingclient/icons/32x32/Folder_1_Favorite.png
...

Was soll geändert werden? -> der Dateiname der Zieldatei, also
Symbol_Edit24x24.png -> SymbolEdit.png
Folder_1_Favorite.png -> FolderFavorite.png

Es sollen folgende Muster im letzten String nach / verschwinden:
-unterer Strich _
-jegliche Nummern
-16x16
-24x24
-32x32


Ergebnis soll so aussehen:
Code:
ressources/swingclient/Dialog/SearchDialog/Edit/Symbol_Edit24x24.png => ressources/swingclient/icons/24x24/SymbolEdit.png
ressources/swingclient/Toolbar_Menubar/FavoriteGroup/Folder_1_Favorite.png => ressources/swingclient/icons/32x32/FolderFavorite.png
...

Teil 2

Ich habe eine Struktur im Verzeichniss "ressources" mit mehreren Unterordnen.

Die Dateinamen sollen so gändert werden

ressources/.../24x24/SymbolEdit.png

Das soll ausgeschnitten werden:

-unterer Strich _
-jegliche Nummern
-16x16
-24x24
-32x32

Beispiele:
SymbolEdit24x24.png -> SymbolEdit.png
SymbolEdit32x32.png -> SymbolEdit.png
SymbolEdit16x16.png -> SymbolEdit.png
SymbolEdit_124x24.png -> SymbolEdit.png
SymbolEdit_2_16x16.png -> SymbolEdit.png

Hinweis: Die Dateien liegen in unterschiedlichen Verzeichnissen, so dass sich die Namen nicht überschneiden werden.


Vielen Dank im Voraus!
 
A

Anonymous

Gast
dariuszmarek schrieb:
Ich möchte in einer Mapping-Datei mit ca 1600 Zeilen die Dateinamen korrigieren.

Was soll geändert werden? -> der Dateiname der Zieldatei, also
Symbol_Edit24x24.png -> SymbolEdit.png
Folder_1_Favorite.png -> FolderFavorite.png

Es sollen folgende Muster im letzten String nach / verschwinden:
-unterer Strich _
-jegliche Nummern
-16x16
-24x24
-32x32

Und selbst schon ein paar Zeilen ausprobiert ;) ;) ;)

Hier mal mein Entwurf, aber Vorsicht ist nicht getestet, Script ändert auch nichts sondern gibt nur die mv-Befehle aus, welche ausgeführt werden müssten.
Code:
find -type f -name "*.png" | while read FILE
do
        FILENAME_OLD=$(basename "$FILE")
        PATHNAME=$(dirname "$FILE")

        FILENAME_NEW=$(echo "$FILENAME_OLD"|sed 's/\([0-9][0-9]\)x\1\|_\|[0-9]//g')
        echo "mv ${PATHNAME}/${FILENAME_OLD} ${PATHNAME}/${FILENAME_NEW}"
done
Mal ausprobieren, eventuell noch etwas anpassen und wenn das Ergebniss gut aussieht die "echo Zeile" bearbeiten.

PS: sehe gerade du willst das nicht im Verzeichnis selbst machen sondern aus deiner "Mappingdatei" heraus. Prinziell genauso nur eben die äußere Schleife ist anders.

Code:
while read FELD1 FELD2 .....
do
FILE=$FELD?
...
echo  "$FELD1 $FELD2 ....${PATHNAME}/${FILENAME_NEW}"

done < mapdatei.txt

Die ganz Mutigen machen das gleich komplett mit sed ohne vorher die Felder noch auseinanderzulegen, aber wohl etwas riskant alles auf einmal
hier mal ein Versuch ;) , aber ohne jegliche Gewähr solange ich nicht deine Orginaldatei hier komplett gesehen habe.
Code:
 sed '{H;s/\(^.*\/\).*$/\1/;x;s/^.*\///;s/\([0-9][0-9]\)x\1\|_\|[0-9]//g;H;x;s/\n//;p;x;d}' mapdatei.txt
oder man macht es einzeln mit sed also erst nur die "00x00" im nächsten Schritt die "_" und dann nochmal und dann nur die "0"


robi
 

framp

Moderator
Teammitglied
robi schrieb:
...Die ganz Mutigen machen das gleich komplett mit sed ohne vorher die Felder noch auseinanderzulegen, aber wohl etwas riskant alles auf einmal
hier mal ein Versuch ;) , aber ohne jegliche Gewähr solange ich nicht deine Orginaldatei hier komplett gesehen habe.
Code:
 sed '{H;s/\(^.*\/\).*$/\1/;x;s/^.*\///;s/\([0-9][0-9]\)x\1\|_\|[0-9]//g;H;x;s/\n//;p;x;d}' mapdatei.txt
oder man macht es einzeln mit sed also erst nur die "00x00" im nächsten Schritt die "_" und dann nochmal und dann nur die "0"...
:thumbs:
 
OP
dma67

dma67

Hacker
D A N K E!!!
1.
Code:
sed '{H;s/\(^.*\/\).*$/\1/;x;s/^.*\///;s/\([0-9][0-9]\)x\1\|_\|[0-9]//g;H;x;s/\n//;p;x;d}' mapdatei.txtsed '{H;s/\(^.*\/\).*$/\1/;x;s/^.*\///;s/\([0-9][0-9]\)x\1\|_\|[0-9]//g;H;x;s/\n//;p;x;d}' mapdatei.txt
Funktioniert zu 99%, 1% von Hand korrigiert

2.
Code:
find -type f -name "*.png" | while read FILE
do
        FILENAME_OLD=$(basename "$FILE")
        PATHNAME=$(dirname "$FILE")

        FILENAME_NEW=$(echo "$FILENAME_OLD"|sed 's/\([0-9][0-9]\)x\1\|_\|[0-9]//g')
        echo "mv ${PATHNAME}/${FILENAME_OLD} ${PATHNAME}/${FILENAME_NEW}"
done
Funktioniert zu 95%, wie ich es wollte. Rest von Hand.

[CLosed]
 
Oben