ฉันจะค้นหาชื่อไวด์การ์ดในโฟลเดอร์ย่อยทั้งหมดได้อย่างไร


26

ฉันจะค้นหาชื่อไวด์การ์ดในโฟลเดอร์ย่อยทั้งหมดได้อย่างไร สิ่งที่เทียบเท่ากับคำสั่ง DOS: dir *pattern* /sใน * nix

คำตอบ:


40

findคุณสามารถใช้ ตัวอย่างเช่นหากคุณต้องการค้นหาไฟล์และไดเรกทอรีทั้งหมดที่มีabcdในชื่อไฟล์คุณสามารถเรียกใช้:

find . -name '*abcd*'

12

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ตัวเลือกเพื่อแก้ไขปัญหานั้น


shopstar-s globstar ทำอะไร?
capybaralet

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.