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