Synology-Forum.nl

Tweaks / Addons A.K.A. The Underground => Optware / IPKG / Telnet => Topic gestart door: raptile op 05 oktober 2012, 22:38:16

Titel: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: raptile op 05 oktober 2012, 22:38:16
Het komt wel eens voor dat er bestanden worden gedownload/geupload met diacrieten er in.
Meestal worden deze vervangen door een vraagteken(?)

Deze bestanden kun je niet meer renamen omdat de ? niet wordt herkend.
Bijvoorbeeld:
Alina Fernández wordt Alina Fern?ndez

Om deze bestanden toch te kunnen hernoemen kun je het volgende doen:

met het commando
ls -ilKun je het inode nummer achterhalen van bestanden. (google op inode als je wilt weten wat het is)
Het commando zal alle bestanden laten zien met daarvoor het inode nummer.

Je zou er een ingewikkeld script kunnen schrijven om dit te renamen maar het kost heel veel meer uur (dat denk ik iig omdat ik niet handig ben met awk e.d.!) om dit script te schrijven dan handmatig de bestanden te renamen.

Het renamen doe je zo:
typ het commando ls -il in en noteer het inode nummer van het bestand wat je wil renamen.

Gebruik vervolgens het commando:
find . -type f -inum "inode nummer hier tussen de haakjes" -exec mv {} "nieuwe bestandsnaam tussen deze haakjes" ; om alsnog een andere naam te kunnen geven aan het bestand.

Succes!
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Bosui op 23 december 2014, 21:19:46
Dat cmd werkt niet bij mij. (zie bijlage)

Is er inmiddels door een handig iemand al een scriptje geschreven die naar bestanden met "verkeerde" tekens zoekt en deze vervangt door een "goed teken" ?
Het maakt me even niet uit welk teken.

Ik ben bezig geweest een paar100 gig te backuppen en in diverse folders heb ik bestanden met speciale tekens staan die de Syn. Nas niet leuk vind.

Ik zie het echt niet zitten om die 10duizenden bestanden door te gaan zoeken om elke file handmatig te gaan renamen.  :(
Je zou verwachten dat dit inmiddels wel opgelost zou zijn, toch ?

DS1815+ met 8x WD30EFRX-68EUZN0
DSM 5.1.5021

Excuus als ik in een verkeerd topic post, maar er zijn er zoveel die over dit probleem gaan dat ik deze er maar uitgepikt heb.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: janbal op 23 december 2014, 21:41:09
Kijk even in het onderdeel SABnzb, daarin staat het een en ander, o.a. van mijzelf. Ik gebruik SABnzb niet meer maar gebruik nog wel (heel incidenteel) het scriptje CharTranslator.py gekoppeld (als 1-malige opdracht) aan de schedule-module van DSM. Eventueel kun je dat scriptje ook via Putty draaien.  Je kunt zo een zelf te kiezen bereik aan mappen laten scannen en corrigeren. Werkt behoorlijk
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Goner op 24 december 2014, 10:54:04
Dat cmd werkt niet bij mij. (zie bijlage)
de ; aan het eind v/d regel moet zijn \;
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Bosui op 24 december 2014, 17:57:09
Ok, thanks. Ben tussen het werk door een los py-script aan het proberen nu.
Sabnzbd kan ik niet installeren via package center. Die staat bij mij niet in de lijst van Syno community.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: janbal op 24 december 2014, 18:17:50
En kijk anders voor dat scriptje even hier: http://forums.sabnzbd.org/viewtopic.php?f=9&t=10595&sid=f64050ef576bce550546a5a27617d131&start=60#p79752


Als je dat scriptje aanmaakt met een py extensie dan moet je dat kunnen gebruiken. (Als je tenminste ook python hebt draaien).
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Ben(V) op 24 december 2014, 19:04:58
Je realiseert je toch wel dat die namen er alleen maar vreemd uitzien doordat je met een andere "code page" er naar kijkt dan waarmee ze zijn aangemaakt?

Als ik een bestand heb met diakritische teken die er onder windows normaal uitzien en ik kijk er op de NAS met putty naar of met filestation dan ziet het er ook rar uit.
Allemaal een kwestie van de juiste codepage gebruiken.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Bosui op 26 december 2014, 15:40:03
Heya Jan, ik was al een post van je tegengekomen waarin je zei je muziekverzameling "even" geconverteerd te hebben.
Tja, ging het maar zo simpel eh..
Laatste keer dat ik met Linux bezig geweest ben was met Mandrake 9.0, dus dat is al even geleden.
Bovendien is dit mijn eerste echte NAS. Hiervoor had ik een WD Mybook in de meterkast hangen waar alle muziek op stond.
Paar weken terug de Syn. gekocht, en alle muziek van de Mybook naar de Synology gekopieerd.
Probleemloos, dat dacht ik.

Die rare tekens interesseren me niet zo veel Ben, maar ik heb er wel een probleem mee dat bestanden met die tekens niet te verplaatsen zijn, niet te deleten en niet af te spelen !
Bovendien heeft een of ander programma op de Syn. ook een hele berg logfiles gemaakt in de Data map met rare tekens in de naam, maar da's weer een ander probleem.

Ik ben zover dat ik Python3 geinstalleerd heb, hopelijk is dat goed.
Ik heb dat Pyhton script gekopieerd en op m'n synology gezet, maar geen idee waar die heen moet eigenlijk, dus een random folder op volume2.
Sabnzbd kan ik niet downloaden, staat niet in de lijst...ik had ook eigenlijk niet verwacht dat het zó makkelijk zou zijn.

Mgoed, bij dat script op m'n nas zetten gaat het al fout denk ik ;)

En dan nog proberen uit te voeren via Telnet, wat dus niet lukt.
Script niet gevonden ofzo.

Dus hier loop ik vast...meer posts lezen vol programmeertaal en scripts, dit kost echt dagen werk voor mij.

Ik baal best wel een beetje, want ik als nitwit customer verwacht toch dat ik gewoon wat files van een andere HD naar de nas kan zetten zonder een complete linuxcursus te volgen om ze überhaupt te gebruiken.
Ik begrijp dat Linux dit soort bugs heeft, daarom ben ik na MDK9 overgestapt op Windows, maar waar is de makkelijke fix, na meer dan een jaar ?

Oh, bijdeweg...ik kan de files vanaf m'n WD Mybook gewoon afspelen op m'n TV/Windows7 Pc.
Als ik diezelfde files vanaf de Syn. probeer af te spelen kunnen ze niet gevonden -terwijl ik ze wel zie- of op andere manier bewerkt worden.

Had ik dit van te voren geweten, dan had ik 12x een WD Mybook gekocht en op een switch gezet in plaats van deze Synology.  :(
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Ben(V) op 26 december 2014, 16:07:34
Even een paar dingen op een rijtje zetten.
Je zegt dat je die bestanden met die rare namen niet kunt verplaatsen nog verwijderen.
Mijn vraag is dan hoe heb je ze erop gezet en waarmee wil je ze verplaatsen of verwijderen.

Verder hebt je SABnzbd niet nodig om die python scripts te draaien.

De meeste pythons scripts zijn gemaakt voor versie 2 van python en niet versie 3.
Je loopt een grote kans dat het script niet draait onder python 3

Het script moet je aanroepen vanuit python en uiteraard met een volledig path
Dus iets van:

Citaat
/volume1/@appstore/python/bin/python /volume1/<path naar script>/<scriptnaam>.py

PS Als je bestanden gewoon op een share staan en ze vanuit je PC te benaderen zijn dan kun je ook onderstaand programma gebruiken op je PC.

http://sourceforge.net/projects/diacriticsremov/
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Bosui op 26 december 2014, 18:16:54
Ik heb ze erop gezet met behulp van File station, ftp verbinding gemaakt met de Mybook en zo gekopieerd via LAN.
Ik heb ook diverse folders met Total commander over het netwerk gekopieerd.
(Mybook heb ik een driveletter gegeven via een netwerkverbinding, de synology staat in de netwerkomgeving)
Een ander deel (vanaf een gewone externe HD) heb ik via USB gedaan, wat ook een stuk sneller ging.

Ik kan de bestanden niet verplaatsen/deleten/afspelen via File station op de synology, en ook niet via de Pc als ik ze benader met Total commander/Windows7.

Dat van Pyhton vermoedde ik al, maar surprise surprise...ook Pyhton 2 staat bij mij niet in Package center.
Ik heb de keus tussen Python module, wat een uitbreiding is voor Python2, of Python3.
Ik dacht die module heb ik niets aan als ik P2 er nog niet op heb, daarom P3 gekozen, klinkt als de laatste versie.

Relevant is nu denk ik:
Hoe kom ik erachter of ik Python2 heb, waar zou ik die kunnen vinden (path?), en hoe ? Via telnet ?

Diacriticsremover zag er veelbelovend uit, maar liep tegen hetzelfde probleem aan helaas. (bijlage)

Thanks voor de hulp man, ik waardeer dat echt.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Tien op 26 december 2014, 18:59:29

Diacriticsremover zag er veelbelovend uit, maar liep tegen hetzelfde probleem aan helaas. (bijlage)



Die werkt zelfs niet met een share op admin nivo. Je zal dit 'op de NAS' moeten oplossen. Het eerder voorgestelde script werkt echt heel goed en je zal van die tekens ook afmoeten als je een backup wil maken van de betreffende bestanden. Eenmaal dat script goed draaien en verder zorgen bij het downloaden/kopieren voor de goede pages dan wel na iedere download het script laten draaien (hetgeen sab automatisch voor je kan doen). Ik heb er nooit meer last van nu.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Goner op 26 december 2014, 23:45:53
Ik begrijp dat Linux dit soort bugs heeft,
Ik denk niet dat dit een Linux bug is ... ik werk nu al maanden met Linux Mint sinds XP niet meer ondersteund wordt en daarvoor met Mandrake/Mandriva en Unbuntu (in dual-boot met Windows) en heb nooit problemen met diakrieten gehad. Het lijkt er meer op dat Synology nog steeds de UTF-8 support niet goed voor elkaar heeft.

Blijkbaar is het nog steeds nodig om dat handmatig in te stellen, zie o.a. :
http://www.synology-forum.nl/spotweb/instellen-locales-nl_nl-utf8-op-synology-nas/15/ (http://www.synology-forum.nl/spotweb/instellen-locales-nl_nl-utf8-op-synology-nas/15/)
http://www.chainsawonatireswing.com/2012/01/08/set-up-the-synology-diskstation-ds411j-to-support-utf-8/ (http://www.chainsawonatireswing.com/2012/01/08/set-up-the-synology-diskstation-ds411j-to-support-utf-8/)
http://www.spot-net.nl/kb/article.php?a=162 (http://www.spot-net.nl/kb/article.php?a=162)

UTF-8 support zit ook ingebakken in bijv. dit Java package :
http://pcloadletter.co.uk/2011/08/23/java-package-for-synology/ (http://pcloadletter.co.uk/2011/08/23/java-package-for-synology/)
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Ben(V) op 27 december 2014, 10:10:33
Ben er even ingedoken wat nu het echte probleem is en daarover het volgende.

Er zijn twee dingen aan de hand met deze speciale karakters in filenamen.

Het eerste is dicritische tekens die door verschillende applicatie verschillend worden weergegeven.
Hoe ze worden weergegeven is afhankelijk van instellingen van je linux (de locale) en uiteraard van de bron die de filenaam heeft aangemaakt.
Dit is allemaal niet zo mooi om naar te kijken maar verder wel mee te werken.

Het tweede probleem is dat er een aantal karakters zijn die door de shell als commandos geinterperteerd worden en die zorgen ervoor dat sommige bestanden niet te verwijderen of te verplaatsen zijn.
Je kunt die win de shell wel escapen door er een \ voor te zetten, maar in in Filemanager kan dat natuurlijk niet.

Zie: http://en.wikipedia.org/wiki/Filename
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: janbal op 27 december 2014, 13:46:12
Je kunt de bestanden deleten in filemanager door de hele map te deleten.


Je kunt ook bijv. WinSCP gebruiken.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Ben(V) op 28 december 2014, 19:18:09
Heb even dat pythonscript een beetje aangepast en de overbodige dingen eruit gehaald.
Zoals het nu is, gaat hij alle bestanden op /volume1/video (inclusief alle subdirectories) scannen en renamen indien nodig.
Je kunt dit simpel wijzigen de eerste regel van het Main programma.
Daar staat nu:
StartFolder = "/volume1/video"
Dat kun je veranderen in wat je wilt, als het maar een bestaande directory is.

Save de pythoncode als bijvoorbeeld
Citaat
/volume1/video/TranslateChar.py

Citaat
/volume1/@appstore/python/bin/python2 /volume1/video/TranslateChar.py


Code: (python) [Selecteer]
#!/volume1/@appstore/python/bin/python2
#-*- coding: iso-8859-15 -*-
#
# If a file has been archieved under an ISO-8859 environment and unarchived
# under an UTF8 environment, then you will get an encoding format problem.
# The file will not be readable through SAMBA.
#
# To fix this problem, you must convert the encoding format
# to the UTF8 (default Synology encoding)
#
# NB: in all cases, files will be readable through samba, even if the detection
# failed. But converted characters will not be good
#
# Remark: I guess it should work for any other encoding style. Just replace
# ISO-8859-15 (Western Europe) by the one coresponding to your country:
# http://en.wikipedia.org/wiki/Character_encoding#Common_character_encodings
#

# get library modules
import sys, os

########################
# ----- Functions ---- #
########################

# Special character hex range:
# CP850: 0x80-0xA5 (fortunately not used in ISO-8859-15)
# UTF-8: 1st hex code 0xC2-0xC3 followed by a 2nd hex code 0xA1-0xFF
# ISO-8859-15: 0xA6-0xFF
# The function will detect if fileDirName contains a special character
# If there is special character, detects if it is a UTF-8, CP850 or ISO-8859-15 encoding
def renameFunc(fullPath, fileDirName):
    encodingDetected = False
    Count = 1
    # parsing all files/directories in order to detect if CP850 is used
    for Idx in range(len(fileDirName)):
        # /!\ detection is done 2char by 2char for UTF-8 special character
        if (len(fileDirName) != 1) & (Idx < (len(fileDirName) - 1)):
            # Detect UTF-8
            if ((fileDirName[Idx] == '\xC2') | (fileDirName[Idx] == '\xC3')) & ((fileDirName[Idx+1] >= '\xA0') & (fileDirName[Idx+1] <= '\xFF')):
                print os.path.join(fullPath, fileDirName) + " -> UTF-8 detected: Nothing to be done"
                encodingDetected = True
                break;
            # Detect CP850
            elif ((fileDirName[Idx] >= '\x80') & (fileDirName[Idx] <= '\xA5')):
                utf8Name = fileDirName.decode('cp850')
                utf8Name = utf8Name.encode('utf-8')
                os.rename(os.path.join(fullPath, fileDirName), os.path.join(fullPath, utf8Name))
                print os.path.join(fullPath, fileDirName)
                print os.path.join(fullPath, utf8Name) + " -> CP850 detected: Renamed"
                encodingDetected = True
                break;
            # Detect ISO-8859-15
            elif (fileDirName[Idx] >= '\xA6') & (fileDirName[Idx] <= '\xFF'):
                utf8Name = fileDirName.decode('iso-8859-15')
                utf8Name = utf8Name.encode('utf-8')
                os.rename(os.path.join(fullPath, fileDirName), os.path.join(fullPath, utf8Name))
                print os.path.join(fullPath, fileDirName)
                print os.path.join(fullPath, utf8Name) + " -> ISO-8859-15 detected: Renamed"
                encodingDetected = True
                break;
        else:
            # Detect CP850
            if ((fileDirName[Idx] >= '\x80') & (fileDirName[Idx] <= '\xA5')):
                utf8Name = fileDirName.decode('cp850')
                utf8Name = utf8Name.encode('utf-8')
                os.rename(os.path.join(fullPath, fileDirName), os.path.join(fullPath, utf8Name))
                print os.path.join(fullPath, fileDirName)
                print os.path.join(fullPath, utf8Name) + " -> CP850 detected: Renamed"
                encodingDetected = True
                break;
            # Detect ISO-8859-15
            elif (fileDirName[Idx] >= '\xA6') & (fileDirName[Idx] <= '\xFF'):
                utf8Name = fileDirName.decode('iso-8859-15')
                utf8Name = utf8Name.encode('utf-8')
                os.rename(os.path.join(fullPath, fileDirName), os.path.join(fullPath, utf8Name))
                print os.path.join(fullPath, fileDirName)
                print os.path.join(fullPath, utf8Name) + " -> ISO-8859-15 detected: Renamed"
                encodingDetected = True
                break;
    if (encodingDetected == False):
        print os.path.join(fullPath, fileDirName) + " -> No special characters detected: Nothing to be done"
    return


###########################
# ----- Main Program ---- #
###########################

StartFolder = "/volume1/video"

# process each sub-folders starting from the deepest level
print 80*'-'
print "Renaming folders to UTF-8 format..."
for dirname, dirnames, filenames in os.walk(StartFolder, topdown=False):
    for subdirname in dirnames:
        renameFunc(dirname, subdirname)
print "Folder renaming Done !"
print 80*'-'
print ""

# process each file recursively
print 80*'-'
print "Renaming files to UTF-8 format..."
for dirname, dirnames, filenames in os.walk(StartFolder):
    for filename in filenames:
        renameFunc(dirname, filename)
print "Files renaming Done !"
print 80*'-'
print ""


print ""
print "Character encoding translation done!"
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Tien op 28 december 2014, 19:58:59
Bedankt! Als je me nou ook nog kan vertellen hoe ik in NzbGet dit script kan laten draaien na uitpakken van gedownloade files (zoals dat ook in Sab werkt), ben je helemaal een held!
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Ben(V) op 28 december 2014, 20:17:18
Geen idee, gebruik geen NZBget.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Tien op 28 december 2014, 20:19:07
is het eenvoudig mogelijk dit script automatisch te laten draaien voordat een backuptaak start?
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Ben(V) op 28 december 2014, 20:40:26
Ja je kunt een simpel script maken en in de taakplanner hangen.
Laat je even voor de backup draaien.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Birdy op 28 december 2014, 21:34:03
Voor NZBGet hebben we toch het Post-Processing Script: CharTransProcess.py ?
http://nzbget.net/forum/viewtopic.php?f=8&t=963

[attachimg=1]
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Tien op 28 december 2014, 21:35:54
dat heb ik dus nooit werkend gekregen helaas
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Ben(V) op 29 december 2014, 09:17:56
Voor NZBGet hebben we toch het Post-Processing Script: CharTransProcess.py ?
http://nzbget.net/forum/viewtopic.php?f=8&t=963

(Link naar bijlage)

Aha deze kende ik niet maar is ook een afleiding van hetzelfde script dat ik als bron gebruikt heb.
Die was voor SABnzbd bedoelt. In principe hetzelfde idee dus.

Mijn bron was dit:
http://forums.sabnzbd.org/viewtopic.php?f=9&t=10595

PS Dat script waar je naar verwijst gaat uit van de standaard locatie van python en kan dus niet zomaar gebruikt worden als je python van de SynoCommunity gebruikt.
Je moet dan de eerste regel in het script vervangen door:
Code: (python) [Selecteer]
#!/volume1/@appstore/python/bin/python2
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Ben(V) op 29 december 2014, 09:56:06
Bedankt! Als je me nou ook nog kan vertellen hoe ik in NzbGet dit script kan laten draaien na uitpakken van gedownloade files (zoals dat ook in Sab werkt), ben je helemaal een held!

Net topic gelezen die hier over gaat met een prima beschrijving van Birdy hoet het moet.
Zie:
http://www.synology-forum.nl/nzbget/extra-script-in-nzbget-toevoegen/?topicseen

PS Ik heb zojuist de eerste regel van het script nog even aangepast. Daar stond in de eerste regel python en dat moest python2 zijn. Is voor standalone gebruik met het commando dat ik opgaf van geen belang maar als je het als script voor NZBget gebruikt wel.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Bosui op 05 januari 2015, 23:57:22
Allrite..ben even van de wereld geweest, feestdagen heh..
Ik moest even opzoeken welk path ik moest gebruiken.
Ik heb nu "/usr/bin/python2 /folder naar pythonscripten rarebestanden/" gedaan, en dan zie ik als output wel Renaming folders en renaming files.

Maar als ik het goed zie moet je dus dat scriptje in de folder zetten waar je de 'verkeerde filenamen' hebt staan ?
Ik heb 'm in m'n audio-map gezet, en daarna de opdrachtregel gegeven via SSH, krijg op het scherm wel de output, maar eigenlijk gebeurt er niets in de subfolders in de Audiomap.

Het is sowieso allemaal wat vaag nu.
Op dit moment kan ik wel de bestanden met vreemde namen afspelen of bekijken.
Dat kon eerst niet, dan kreeg ik te zien 'file bestaat niet'.

Ik snap er weinig meer van. Please make it go away! ghehe...
Jullie snappen waarschijnlijk ook weinig van mijn uitleg.

Ok, ik heb in de Data map een zooi bestanden staan met vraagtekens enzo..DSM heeft die files zelf gemaakt. Logbestanden enzo...
Dus ik heb dat pythonscript verplaatst naar die folder.
Daarna uitgevoerd...
En voila, ik zie geen verandering in de filenamen via filestation.
Maar rechtsklikken op een file resulteert wel weer in "bestand bestaat niet".

Zal er een screenshotje bij doen, dunno of het helpt.
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Ben(V) op 06 januari 2015, 09:42:16
Je moet in het python script wel deze regel aanpassen.

Code: (python) [Selecteer]
StartFolder = "/volume1/video"

die moet je in jouw geval veranderen in:
Code: (python) [Selecteer]
StartFolder = "/volume2/Data"
Dit is de folder die hij gaat processen (inclusief eventuele subfolders).
Titel: Re: [HANDLEIDING] Renamen van bestanden met vreemde tekens.
Bericht door: Bosui op 07 januari 2015, 22:47:13
Aaah natuurlijk.  :oops:
Eindelijk, is het gelukt !

Thanks voor je geduld Ben.