มีวิธีบอกack
ให้ค้นหาเฉพาะข้อความในโฟลเดอร์ปัจจุบันหรือไม่? (หรือระบุmax-depth
ระดับ?) และด้วยgrep
?
มีวิธีบอกack
ให้ค้นหาเฉพาะข้อความในโฟลเดอร์ปัจจุบันหรือไม่? (หรือระบุmax-depth
ระดับ?) และด้วยgrep
?
คำตอบ:
ใช้-n
สำหรับno-recurse
:
$ ack -n foo
grep
จะไม่เรียกซ้ำโดยค่าเริ่มต้นและคุณควรใช้การ-r
ตั้งค่าสถานะนี้เฉพาะเมื่อคุณต้องการค้นหาแบบเรียกซ้ำ
คุณสามารถค้นหาไดเรกทอรีปัจจุบันด้วยgrep
ดังนี้:
$ grep -- foo *
คุณสามารถหาคู่กับอาร์กิวเมนต์ -exec ตัวอย่าง:
find . -maxdepth 1 -exec grep foo {} \;
สิ่งนี้สามารถปรับขนาดได้เช่น -maxdepth 2
-maxdepth 1
) ปรับขนาดได้ -maxdepth 2
เช่น ฉันไม่รู้วิธีอธิบายการแก้ไขที่คุณทำเช่นนี้
-maxdepth
) ไม่ใช่ไวยากรณ์พกพา / มาตรฐาน (เฉพาะ GNU และ BSD บางตัว) นอกจากนี้ยังไม่มีจุดใช้\;
ที่นี่ (เรียกใช้หนึ่งgrep
ไฟล์ต่อหนึ่งไฟล์) ใช้grep -H foo {} +
(เฉพาะ GNU) หรือgrep foo /dev/null {} +
(มาตรฐาน) เพื่อให้แน่ใจว่าพิมพ์ชื่อไฟล์อยู่เสมอ มาตรฐานเทียบเท่า-maxdepth 2
จะเป็นfind . -path './*/*' -type d -prune -o -type f -exec ...
.
ที่คุณไม่ได้ให้-mindepth 1
) ในขณะที่ GNU grep
จะไม่พยายามที่จะอ่านไดเรกทอรีที่มี-r
(มันrecursesในพวกเขา) คุณอาจต้องการที่จะเพิ่ม-d skip
การgrep
(สมมติว่า GNU grep) หรือดีกว่าเพิ่ม! -type d
ไปfind
หรือดียิ่งขึ้น-type f
(หรือ-xtype f
สมมติว่า GNU find
) ในขณะที่คุณอาจไม่ต้องการgrep
ที่จะอ่านไฟล์ที่ไม่ปกติ
grep -Hin
กับวิธีนี้เพื่อให้ฉันสามารถดูชื่อไฟล์และบรรทัดที่เกิดขึ้น
-n
จะไม่เรียกเก็บเงินเลย