เหตุใด 'ไม่พบ' แสดงไฟล์นี้


21

ใช้findกับgrepหนึ่งสามารถค้นหาไฟล์ที่ตรงกับรูปแบบ:

# find | grep error
./solr-modifiedSolr4/SolrPhpClient/phpdocs/errors.html
./error_log
./includes/classes/error_log

อย่างไรก็ตามการใช้findเพียงไฟล์เดียวไม่พบ:

# find . -name error*
./error_log
./includes/classes/error_log

ทำไมไม่findค้นหาerrors.htmlไฟล์เมื่อไม่ได้ใช้กับgrep? วิธีfindใช้ในการแสดงไฟล์นี้เช่นกัน?

คำตอบ:


42

คุณต้องอ้างอาร์กิวเมนต์ของคุณerror*เพราะเชลล์ขยายมัน ดังนั้นสิ่งที่คุณกำลังเรียกใช้ตอนนี้ก็คือfind -name error_logเพราะนั่นคือสิ่งที่เชลล์สามารถขยายให้เป็น (มีไฟล์ชื่อerror_logในไดเรกทอรีปัจจุบันของคุณ)

find . -name 'error*'

เป็นการร้องขอที่ถูกต้องสำหรับกรณีการใช้งานของคุณ


12
การเขียนแบบ altenative คือfind -name error\*- กดปุ่มน้อยกว่าเพื่อกด;) สิ่งนี้มีผลเหมือนกันการ*ส่งผ่านเป็นเครื่องหมายดอกจันที่รู้แจ้งไปยังคำสั่ง find และไม่ได้ขยายโดยเชลล์ของคุณ
zhenech

3
เมื่อมีปัญหากับเชลล์ (วิธีที่มันตีความบรรทัดคำสั่งของคุณและส่งผ่านอาร์กิวเมนต์และพารามิเตอร์ทั้งหมดไปยังคำสั่งจริง) ให้เรียกใช้คำสั่งที่เตรียมไว้ใหม่ด้วยechoคำสั่ง ดังนั้นหากคุณต้องการเรียกใช้echo find . -name error*มันจะมีfind . -name error_log
ผลลัพธ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.