มีวิธีบอก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จะไม่เรียกเก็บเงินเลย