Un nom Samba plus convivial pour l'homme

11

La plupart de nos ordinateurs exécutent Ubuntu, mais deux d'entre eux sont à double démarrage dans Windows, et lorsque nous avons des invités, ils exécutent généralement des ordinateurs Windows. Ainsi, en plus d'utiliser NFS, notre serveur de fichiers (serveur Ubuntu) exécute également Samba.

Et comme nous utilisons principalement Ubuntu, nous aimons profiter de ses avantages par rapport à Windows, comme pouvoir utiliser les caractères \:*?"<>|dans un nom de fichier. Le problème, bien sûr, est que Windows n'accepte pas ces caractères dans les noms de fichiers, et donc Samba doit traduire le nom de fichier en quelque chose de plus acceptable. Cependant, je trouve que la façon dont cela fonctionne est désagréable.

Le nom de fichier Episode 182 - Exorcist 2: The Heretic.mp4par exemple se transforme en E4Q82R~Y.MP4. C'est une terrible "correction". Existe-t-il un moyen de rendre la mutilation de Samba un peu plus conviviale pour les humains? Est-il possible de le "corriger" à quelque chose comme à la Episode 182 - Exorcist 2_ The Heretic.mp4place, où les caractères illégaux sont simplement substitués?

Alex
la source
1
Consultez la description de ce correctif dans la liste de diffusion Samba . La méthode décrite fonctionne dès le départ avec Samba 4.1.4-Debian.
mpy
@mpy J'ai essayé, mais cela ne fonctionne toujours pas pour moi lorsque je copie des fichiers avec des caractères Windows illégaux sur mon partage samba. Cela fonctionne pour convertir uniquement les choses qui auraient été OK (comme un espace converti en symbole), mais pas pour les choses qui ne fonctionneraient pas (comme ':' converties en un autre symbole). Des pointeurs?
pd12

Réponses:

11

mangled map est désormais obsolète et ne fonctionnera plus dans les nouvelles versions de Samba.

Vous pouvez utiliser vfs_catia pour résoudre le problème. Ajoutez les lignes suivantes à smb.conf:

vfs objects = catia
catia:mappings = 0x003a:0x2236,0x003f:0x0294,0x002a:0x2217,0x003c:0x276e,0x003e:0x276f,0x0022:0x02ba,0x007c:0x2223,0x005c:0x29f9

Le mappage est spécifié avec des codes de caractères hexadécimaux préfixés 0x séparés par deux points. Le mappage fourni remappera les caractères illégaux aux sosies Unicode qui ne seront probablement pas utilisés dans n'importe quelle langue.

:? * <> "| \
∶ ʔ ∗ ❮ ❯ ʺ ∣ ⧹

Le code peut être placé sous [global]ou dans une [share]section individuelle . Le placer [global]peut affecter les performances.

Notez que les caractères auxquels vous mappez ne peuvent pas être utilisés dans les noms de fichiers sur le serveur ou ils seront inaccessibles.

Exemple: un client Windows accédant à un fichier nommé file❮name.txtsur le serveur demandera file<name.txtau serveur en raison du mappage, ce qui entraînera une erreur de fichier introuvable.

Emil
la source
J'ai essayé mais cela ne fonctionne toujours pas pour moi lorsque je copie des fichiers avec des caractères Windows illégaux sur mon partage samba. Cela fonctionne pour convertir uniquement les choses qui auraient été OK (comme un espace converti en symbole), mais pas pour les choses qui ne fonctionneraient pas (comme ':' converties en un autre symbole). Des pointeurs?
pd12
2
Cela fonctionne très bien! Une chose à noter est que vous ne pouvez pas tout mapper sur le même personnage, et dans votre exemple, tout ce qui a réellement un trait de soulignement ne sera plus accessible. Au lieu de cela, j'ai utilisé les mappages suivants:, devient 0x3a:0x7e 0x3f:0x5eainsi et devient . :~?^
Geoffrey
2

Dans ce lien, vous pouvez voir les options de mangling. Je pense que vous devez d'abord désactiver l'option:

mangled names

Après cela, je suppose que les noms devraient être plus beaux ...

Pour remplacer les deux points, par exemple, utilisez cette ligne:

mangled map =(: _)

Vous pouvez ajouter d'autres règles de remplacement comme celle-ci:

mangled map =(: _) (foo bar)

(remplace également toute occurrence de foo par bar)

Michael K
la source
Ils ont l'air mieux maintenant. En fait, lorsque je mets "noms mutilés" sur "non", les noms de fichiers s'affichent dans Windows complètement inchangés. Bien que cela semble certainement mieux, cela empêche également les applications Windows d'ouvrir les fichiers. Si j'essaie d'ouvrir un fichier tes:t.txtdans le Bloc-notes, par exemple, on me dit "Impossible de trouver le fichier [...] \ tes: t.txt". Il en va de même pour les autres fichiers "illégaux" dans leurs applications respectives.
Alex
édité ma réponse!
Michael K
mangled mapa été supprimé de Samba. D'après ce que je peux dire après un petit coup d'œil, il a été supprimé il y a des années. Voici ce que log.smbddit mon fichier si j'essaie de l'utiliser:Ignoring unknown parameter "mangled map"
Alex
Vous avez raison ... obsolète. Ça ne marchera pas. Ce n'est pas si simple - le nom de fichier compliqué est d'empêcher d'avoir deux fichiers avec le nom de dame. Les fichiers foo: .txt et foo_.txt peuvent exister et votre changement de nom échouera. Le mieux serait donc d'appliquer les règles de nom de fichier de telle sorte que seuls les noms autorisés soient autorisés dans les deux systèmes de fichiers.
Michael K