ฉันจะค้นหาชื่อไวด์การ์ดในโฟลเดอร์ย่อยทั้งหมดได้อย่างไร สิ่งที่เทียบเท่ากับคำสั่ง DOS: dir *pattern* /s
ใน * nix
ฉันจะค้นหาชื่อไวด์การ์ดในโฟลเดอร์ย่อยทั้งหมดได้อย่างไร สิ่งที่เทียบเท่ากับคำสั่ง DOS: dir *pattern* /s
ใน * nix
คำตอบ:
find
คุณสามารถใช้ ตัวอย่างเช่นหากคุณต้องการค้นหาไฟล์และไดเรกทอรีทั้งหมดที่มีabcd
ในชื่อไฟล์คุณสามารถเรียกใช้:
find . -name '*abcd*'
zsh:
ls -ld -- **/*abcd*
Ksh93:
set -o globstar # put this line in your ~/.kshrc
ls -ld -- **/*abcd*
Bash ≥4:
shopt -s globstar # put this line in your ~/.bashrc
ls -ld -- **/*abcd*
Yash:
set -o extendedglob # put this line in your ~/.yashrc
ls -ld -- **/*abcd*
tcsh:
set globstar
ls -ld -- **/*abcd*
ปลา:
ls -ld -- **abcd*
(ระวังบางส่วนของเปลือกหอยเหล่านั้นจะเป็นไปตาม symlinks เมื่อลงมาต้นไม้ไดเรกทอรีบางส่วนของผู้ที่ไม่ชอบzsh
, yash
หรือtcsh
มี***/*abcd*
ที่จะทำมัน)
พกพา (ยกเว้นระบบเก่ามาก OpenBSD ใช้เวลานาน แต่ในที่สุดรองรับexec … +
5.1):
find . -name '*abcd*' -exec ls -ld {} +
ไม่ใช่ POSIX แต่ทำงานได้กับ * BSD, Linux, Cygwin, BusyBox:
find . -name '*abcd*' -print0 | xargs -0 ls -ld
โปรดทราบว่ายกเว้นใน BSDs บางอย่างถ้าไม่มีไฟล์จับคู่พบจะถูกเรียกใช้โดยไม่ขัดแย้งดังนั้นรายการประสงค์ls -ld
.
ด้วยxargs
การใช้งานบางอย่างคุณสามารถใช้-r
ตัวเลือกเพื่อแก้ไขปัญหานั้น
globstar
แล้วเลื่อนลงไป