ชื่อแซมบ้าที่เป็นมิตรกับมนุษย์


11

คอมพิวเตอร์ส่วนใหญ่ของเราใช้งาน Ubuntu แต่สองเครื่องเป็นแบบ dual-boot ใน Windows และเมื่อเรามีแขกมากกว่าพวกเขามักใช้คอมพิวเตอร์ Windows ดังนั้นนอกเหนือจากการใช้ NFS ไฟล์เซิร์ฟเวอร์ของเรา (เซิร์ฟเวอร์ Ubuntu) ยังใช้งานแซมบ้า

และเนื่องจากเราใช้ Ubuntu เป็นส่วนใหญ่เราต้องการใช้ประโยชน์จากข้อดีเหนือ Windows เช่นความสามารถในการใช้อักขระ\:*?"<>|ในชื่อไฟล์ แน่นอนปัญหาคือ Windows ไม่ยอมรับอักขระเหล่านั้นในชื่อไฟล์ดังนั้น Samba จึงต้องแปลชื่อไฟล์เป็นสิ่งที่ยอมรับได้มากกว่า อย่างไรก็ตามวิธีการทำเช่นนี้ฉันคิดว่าน่ารังเกียจ

ชื่อไฟล์เช่นกลายเป็นEpisode 182 - Exorcist 2: The Heretic.mp4 E4Q82R~Y.MP4นี่คือ "การแก้ไข" ที่แย่มาก มีวิธีที่จะทำให้การแซมบ้าเป็นมิตรกับมนุษย์มากกว่าเดิมหรือไม่? เป็นไปได้หรือไม่ที่จะ "แก้ไข" ให้เป็นอย่างที่ต้องการEpisode 182 - Exorcist 2_ The Heretic.mp4แทนที่จะใช้ตัวอักษรผิดกฎหมาย


1
ตรวจสอบรายละเอียดของแพทช์นี้ในรายชื่อผู้รับจดหมายแซมบ้า วิธีที่อธิบายไว้ใช้งานSamba 4.1.4-Debianได้ทันที
mpy

@mpy ฉันได้ลองแล้ว แต่มันยังใช้ไม่ได้สำหรับฉันเมื่อฉันคัดลอกไฟล์ที่มีอักขระ windows ผิดกฎหมายไปยังการแบ่งปันแซมบ้าของฉัน ใช้เพื่อแปลงสิ่งต่าง ๆ ที่จะใช้ได้ (เช่นพื้นที่แปลงเป็นสัญลักษณ์) แต่ไม่ใช่สำหรับสิ่งที่ไม่ทำงาน (เช่น ':' แปลงเป็นสัญลักษณ์อื่น) ตัวชี้ใด ๆ
pd12

คำตอบ:


11

mangled map เลิกใช้แล้วและจะไม่ทำงานใน Samba เวอร์ชันใหม่อีกต่อไป

คุณสามารถใช้vfs_catiaเพื่อแก้ไขปัญหา เพิ่มบรรทัดต่อไปนี้ใน smb.conf:

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

การแมปถูกระบุด้วยรหัสอักขระเลขฐานสิบหกที่นำหน้า 0x คั่นด้วยโคลอน การแม็พที่จัดเตรียมไว้จะทำการแมปอักขระผิดกฎหมายให้เป็นยูนิโค้ดลุคที่ไม่น่าใช้ในภาษาใด ๆ

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

รหัสสามารถใส่ภายใต้[global]หรือใน[share]ส่วนบุคคล การวางไว้[global]อาจส่งผลต่อประสิทธิภาพ

โปรดทราบว่าอักขระใด ๆ ที่คุณจับคู่กับไม่สามารถใช้ในชื่อไฟล์บนเซิร์ฟเวอร์ไม่เช่นนั้นจะไม่สามารถเข้าถึงได้

ตัวอย่าง: ไคลเอนต์ windows ที่เข้าถึงไฟล์ชื่อfile❮name.txtบนเซิร์ฟเวอร์จะร้องขอfile<name.txtจากเซิร์ฟเวอร์เนื่องจากการแมปซึ่งจะทำให้ไฟล์ไม่พบข้อผิดพลาด


ฉันได้ลองแล้ว แต่ก็ยังใช้งานไม่ได้เมื่อฉันคัดลอกไฟล์ที่มีอักขระ windows ผิดกฎหมายไปยังการแบ่งปันแซมบ้าของฉัน ใช้เพื่อแปลงสิ่งต่าง ๆ ที่จะใช้ได้ (เช่นพื้นที่แปลงเป็นสัญลักษณ์) แต่ไม่ใช่สำหรับสิ่งที่ไม่ทำงาน (เช่น ':' แปลงเป็นสัญลักษณ์อื่น) ตัวชี้ใด ๆ
pd12

2
มันใช้งานได้ดี! สิ่งหนึ่งที่ควรทราบคือคุณไม่สามารถแมปทุกสิ่งเป็นอักขระเดียวกันได้และในตัวอย่างของคุณสิ่งใดก็ตามที่มีเครื่องหมายขีดล่างอยู่ในนั้นจะไม่สามารถเข้าถึงได้อีกต่อไป แต่ผมใช้แมปต่อไปนี้: 0x3a:0x7e 0x3f:0x5eเพื่อให้:กลายเป็น~และจะกลายเป็น? ^
Geoffrey

2

ในลิงค์นี้คุณสามารถเห็นตัวเลือกการจัดการ ฉันคิดว่าก่อนอื่นคุณควรปิดการใช้งานตัวเลือก:

mangled names

หลังจากนั้นฉันเดาชื่อน่าจะดีกว่า ...

หากต้องการแทนที่โคลอนเช่นใช้บรรทัดนี้:

mangled map =(: _)

คุณสามารถเพิ่มกฎการแทนที่ได้ดังนี้:

mangled map =(: _) (foo bar)

(นอกจากนี้ยังแทนที่การเกิดขึ้นของ foo โดยแถบ)


ตอนนี้พวกเขาดูดีขึ้นแล้ว ที่จริงแล้วเมื่อฉันตั้ง "mangled names" เป็น "no" ชื่อไฟล์จะปรากฏใน Windows โดยไม่เปลี่ยนแปลง แม้ว่าจะดูดีขึ้นอย่างแน่นอนแต่ก็ทำให้แอปพลิเคชัน Windows ไม่สามารถเปิดไฟล์ได้ หากฉันพยายามเปิดไฟล์tes:t.txtใน Notepad เช่นมีคนบอกฉันว่า "ไม่พบไฟล์ [... ] \ tes: t.txt" กันไปกับไฟล์ "ผิดกฎหมาย" อื่น ๆ ในแอพพลิเคชั่นที่เกี่ยวข้อง
อเล็กซ์

แก้ไขคำตอบของฉัน!
Michael K

mangled mapถูกลบออกจาก Samba จากสิ่งที่ฉันสามารถบอกได้หลังจากที่มองไปรอบ ๆ มันถูกลบออกไปหลายปีที่ผ่านมา นี่คือสิ่งที่log.smbdไฟล์ของฉันบอกว่าถ้าฉันพยายามใช้มัน:Ignoring unknown parameter "mangled map"
อเล็กซ์

คุณพูดถูก ... เลิกใช้แล้ว มันจะไม่ทำงาน ไม่ใช่เรื่องง่าย - ชื่อไฟล์ที่ซับซ้อนคือการป้องกันไม่ให้มีสองไฟล์ที่มีชื่อ dame ไฟล์ foo: .txt และ foo_.txt อาจมีอยู่แล้วการเปลี่ยนชื่อของคุณจะล้มเหลว ดังนั้นสิ่งที่ดีที่สุดคือการบังคับใช้กฎชื่อไฟล์เช่นอนุญาตเฉพาะชื่อเท่านั้นที่อนุญาตในทั้งระบบไฟล์
Michael K
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.