รีลีสจากกลุ่ม scene มักแถมคลิปตัวอย่าง 30 วินาทีมากับหนัง และ Jellyfin ก็ภูมิใจนำแต่ละคลิปขึ้นชั้นเป็นหนังเรื่องหนึ่ง — คลังที่เต็มไปด้วยโปสเตอร์ของ SAMPLE-Sky.Captain… ถ้าไฟล์เหล่านั้นยังซีดอยู่ คุณลบหรือเปลี่ยนชื่อไม่ได้แม้แต่ไฟล์เดียวโดยไม่ทำให้ทอร์เรนต์พัง นี่คือวิธีที่เราซ่อนไฟล์ตัวอย่างทุกไฟล์ในคลังขนาดใหญ่ด้วย glob pattern ไม่กี่บรรทัดโดยไม่แตะระบบไฟล์เลย — และขั้นตอนตรวจสอบที่กันไม่ให้เราซ่อนตอนจริงของซีรีส์ไปเงียบ ๆ ระหว่างทาง
Jellyfin มีกฎการข้ามในตัว (ไม่สนตัวพิมพ์ใหญ่เล็ก) ที่จับกรณีสุภาพได้: ไฟล์ชื่อ sample.mkv ตรงตัว อะไรก็ตามที่ลงท้ายด้วย .sample.mkv และโฟลเดอร์ชื่อ sample ที่มีประโยชน์คือกฎเหล่านี้จับคู่ที่ชื่อ ไม่ใช่ขนาด — เราเจอ “sample” หนึ่งไฟล์ที่ใหญ่กว่า 300 MB ซึ่งกฎในตัวซ่อนไว้อย่างถูกต้องแล้ว
สิ่งที่หลุดรอดไปคือทุกอย่างที่กลุ่ม scene เคยคิดค้นขึ้นมา: SAMPLE-Movie.Name.mkv, Sample-002, !sample.mkv, Movie.Name.Sample.x264-GRP.mkv, movie-sample-GRP.mkv, [SAMPLE] ในวงเล็บเหลี่ยม… แต่ละแบบกลายเป็นไทล์หนังหนึ่งเรื่อง
ไฟล์ .ignore รายโฟลเดอร์ Jellyfin รองรับการวางไฟล์ .ignore เปล่า ๆ ลงในโฟลเดอร์เพื่อยกเว้นมัน มีสองปัญหา: ในรุ่น 10.11 ฟีเจอร์นี้มีรายงานบั๊กเรื่องยกเว้นเกินเหตุที่ยังเปิดอยู่ และมันยกเว้นทั้งโฟลเดอร์ — ไร้ประโยชน์เมื่อไฟล์ตัวอย่างอยู่ในไดเรกทอรีเดียวกับหนังจริง ซึ่งเป็นที่ที่รีลีสจากกลุ่ม scene วางไว้พอดี
เปลี่ยนชื่อในโปรแกรมทอร์เรนต์ qBittorrent เปลี่ยนชื่อไฟล์ภายในได้โดยยังรักษาการซีดไว้ (มันเก็บการจับคู่ไว้) วิธีนี้ได้ผล และเป็นเครื่องมือที่ถูกต้องสำหรับไฟล์ดื้อ ๆ ไฟล์เดียว — แต่ในระดับทั้งคลัง มันคืองานมือรายทอร์เรนต์ และการดาวน์โหลดครั้งถัดไปก็เริ่มวงจรใหม่
ปลั๊กอิน Jellyfin Ignore เพิ่มหน้าคอนฟิกที่คุณใส่รายการ glob pattern อะไรที่ตรงกันจะมองไม่เห็นในการสแกนคลัง มันจับคู่โดยไม่สนตัวพิมพ์ใหญ่เล็ก ซ่อนเป็นรายไฟล์แทนทั้งโฟลเดอร์ และไม่ต้องเปลี่ยนแปลงระบบไฟล์เลย — การซีดไม่มีวันรู้
กับดักหนึ่งข้อก่อนอย่างอื่น: pattern จับคู่กับพาธของไฟล์ทั้งหมด และในไวยากรณ์ DotNet.Glob ที่ปลั๊กอินใช้ * ไม่ข้ามตัวคั่นไดเรกทอรี *sample* แบบตรง ๆ จึงไม่ตรงกับอะไรเลย — ทุก pattern ต้องมีคำนำหน้า **/ เพื่อเอื้อมถึงไฟล์ที่อยู่ลึกในต้นไม้
คำที่พบบ่อยอย่าง “sample” ปรากฏในชื่อเรื่องจริง คำสั่ง find สองตัวบอกล่วงหน้าได้ชัดเจนว่า pattern จะทำอะไร: การตรวจความเสียหายข้างเคียงแสดงไฟล์ขนาดใหญ่ (หนังและตอนจริง) ที่ pattern จะซ่อน และการตรวจตัวที่หลุดรอดแสดงไฟล์ตัวอย่างขนาดเล็กที่มันจะพลาด
R="^sample[-_.]|^!_?sample|-sample-|\.sample\.|\.sample-|-sample\.|_sample\.|ample\]|^sample$"
echo COLLATERAL:; find /path/to/media -ipath "*sample*" -size +300M | sed "s|.*/||" | grep -iE "$R"
echo ESCAPEES:; find /path/to/media -ipath "*sample*" -size -300M \
\( -iname "*.mkv" -o -iname "*.mp4" -o -iname "*.avi" \) \
| sed "s|.*/||" | grep -viE "$R" | sort -uการตรวจของเราคุ้มค่าทันที **/*sample* แบบเหมารวมจะซ่อนตอนหนึ่งของ Chuck (“…Versus the Nacho Sampler”) ตอนหนึ่งของ Lilo & Stitch ที่ชื่อว่า “Sample” ตรง ๆ บทเรียน MasterClass เรื่องการจัดการแซมเปิลเสียงร้อง และตอนรายการทำอาหารที่มี _sample_ ในชื่อไฟล์ ทั้งหมดเป็นเนื้อหาจริง และจะหายไปโดยไม่มีสัญญาณใด ๆ ถ้าเราบันทึก pattern แบบมักง่ายนั้น
**/sample-*
**/sample-*/**
**/sample_*
**/sample_*/**
**/sample.*
**/!sample*
**/!sample*/**
**/!_sample*
**/!_sample*/**
**/*-sample.*
**/*-sample-*
**/*_sample.*
**/*.sample.*
**/*.sample-*
**/*ample].*ตัวที่แปลกกว่าเพื่อน **/*ample].* จับรูปแบบวงเล็บ [SAMPLE]: [ ตัวอักษรตรงตัวแสดงในไวยากรณ์ glob ได้ยาก เพราะมันเปิดกลุ่มอักขระ แต่ ] ที่ไม่ได้ถูกเปิดเป็นแค่อักขระธรรมดา — เราจึงจับคู่ส่วนท้ายของวงเล็บแทน
_sample_ (มันอยู่กลางคำในชื่อตอนจริง) และไม่มีสำหรับ “ sample.mkv” ที่มีช่องว่าง — รูปทรงนั้นถูกใช้ร่วมกันโดยไฟล์ตัวอย่างจริงหนึ่งไฟล์ในคลังของเราและตอนจริงที่ชื่อ “Sample” ไทล์ตัวอย่างหลงมาหนึ่งอันดีกว่าตอนที่หายไปเงียบ ๆ หนึ่งตอน เมื่อมันเริ่มกวนใจเรา การเปลี่ยนชื่อในโปรแกรมครั้งเดียวก็แก้ไฟล์นั้นได้โดยไม่แตะการซีดบันทึก pattern แล้วสั่งสแกนคลังทั้งหมด (Dashboard → Scheduled Tasks → Scan All Libraries) รายการตัวอย่างที่มีอยู่จะถูกลบระหว่างการสแกน และการดาวน์โหลดใหม่จะไม่โผล่มาตั้งแต่แรก ลองค้นหา “sample” ในคลังหลังจากนั้น — ผลควรเกือบว่างเปล่า
ส่วนวิธีแก้เชิงโครงสร้าง คือแยกการดาวน์โหลดกับคลังเป็นสองต้นไม้ที่เชื่อมกันด้วย hardlink — สำเนาในคลังจึงเปลี่ยนชื่อได้อิสระ ขณะที่สำเนาดาวน์โหลดซีดต่อไปโดยไม่ถูกแตะ นั่นคือวิธีที่เราสร้างเครื่องใหม่ คู่มือนี้มีไว้สำหรับคลังหลายปีที่มีมาก่อนกฎนั้น