GNU ls (เช่นคำสั่ง ls ในระบบ Linux ที่ไม่ได้ฝังตัวและ Cygwin มีอยู่ใน unices อื่น ๆ ) มีตัวเลือกในการซ่อนไฟล์บางไฟล์ตามชื่อของมัน ไม่มีวิธีที่จะเพิกเฉยต่อไดเรกทอรี
ls --hide='t_*' uploads
อีกวิธีคือการทำให้เปลือกของคุณทำการจับคู่ Bash, ksh และ zsh มีรูปแบบการปฏิเสธ!(t_*)เพื่อจับคู่ไฟล์ทั้งหมดยกเว้นที่ตรงกันt*; ในทุบตีคุณลักษณะนี้จะต้องเปิดด้วยshopt -s extglobและใน zsh setopt ksh_globจะต้องมีการเปิดใช้งานด้วย zsh ยังมีไวยากรณ์เทียบเท่าที่จะต้องเปิดด้วย^t_* setopt extended_globนี่ยังไม่ละเว้นไดเรกทอรี zsh มีคุณสมบัติพิเศษที่ช่วยให้เพื่อให้ตรงกับไฟล์โดยไม่เพียง แต่ชื่อ แต่ยังตามข้อมูลเมตาและอื่น ๆ : บ่น glob เพิ่ม(.)เมื่อสิ้นสุดการแข่งขันเพื่อ จำกัด ไฟล์ปกติ การปฏิเสธ^เป็นส่วนหนึ่งของไวยากรณ์การจับคู่ชื่อดังนั้น^t_*(.)หมายถึง“ ไฟล์ปกติทั้งหมดไม่ตรงกันt_*” และไม่ใช่“ ไฟล์ทั้งหมดที่ไม่ตรงกับไฟล์ปกติt_*”
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
หากคุณพบว่าตัวเองไม่มีเครื่องมือขั้นสูงคุณสามารถทำเช่นนี้ในยูนิกซ์ใด ๆ findกับ มันไม่ใช่สิ่งที่คุณมักจะพิมพ์บนบรรทัดคำสั่ง แต่มันทรงพลังและแม่นยำ คาเลบได้แสดงให้เห็นแล้วว่าการทำเช่นนี้กับ GNU หา -maxdepthตัวเลือกที่ไม่ได้เป็นแบบพกพา คุณสามารถใช้-pruneแทนเพื่อหยุดการfindเรียกซ้ำ
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
แทนที่-printด้วย-exec ls -lG -- {} +เพื่อดำเนินการlsด้วยตัวเลือกที่คุณชื่นชอบในไฟล์
คำสั่งทั้งหมดข้างต้นซ่อนไฟล์ dot (เช่นไฟล์ที่ชื่อขึ้นต้นด้วย a .) หากคุณต้องการที่จะแสดงพวกเขาผ่าน-Aไปlsหรือเพิ่มDรอบคัดเลือกรอบตัวเป็น zsh ( ls uploads/^t_*(.D)) ด้วยfindคุณสามารถใช้วิธีการที่แตกต่างกันของการทำให้ recurse ระดับหนึ่งเท่านั้น ( findไม่ไฟล์ dot ไม่รักษาเป็นพิเศษ) สิ่งนี้ใช้ได้ผลก็ต่อเมื่อคุณเรียกใช้findในไดเรกทอรีปัจจุบัน
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print