ค้นหาไฟล์ทั้งหมดด้วย ack


14

ฉันจะค้นหาไฟล์ทั้งหมด (รวมถึงไบนารี) ในไดเรกทอรีปัจจุบันด้วยackv2 ได้อย่างไร

ผมต้องการที่จะทำเช่นเดียวกับการทำแต่เพียงกับธงจึงทำงานได้ถ้าผมต้องการที่จะค้นหาไฟล์ทั้งหมดในไดเรกทอรีที่ระบุโดยไม่ต้องต่อท้ายack 'foo' ****


ความแตกต่างระหว่างack 'foo'และack 'foo' **:

$ mkdir test && cd test
$ printf '\x00\x01foo1\x00' > test1
$ printf 'foo2' > test2
$ ack 'foo'
test2
1:foo2
$ ack 'foo' **
test1
1:foo1

test2
1:foo2

ทำไมคุณต้องการใช้ ack แทน grep
Andy Lester

1
@ AndyLester ฉันแค่คิดว่าackดีกว่าgrepเสมอ ฉันผิดไป :).
Tyilo

คำตอบ:


6

ตามค่าเริ่มต้น Ack จะค้นหารูปแบบในไฟล์ที่ไม่ใช่ไบนารีทั้งหมดด้านล่างไดเรกทอรีปัจจุบัน

ฉันเชื่อว่าเวอร์ชัน Ack ที่เก่ากว่าจะค้นหาไฟล์ไบนารีเมื่อคุณส่งการ--binaryตั้งค่าสถานะ ธงนี้ถูกลบออกไป คุณสามารถใช้ grep แทนได้

grep -ar 'foo' .

มันไม่มีส่วนเกี่ยวข้องกับ symlinks มันเกี่ยวกับไบนารีไฟล์!
Tyilo

@Tyilo: ฉันได้แก้ไขคำตอบของฉัน

13

เมื่อคุณส่งชื่อไฟล์ไม่ให้กับ ack มันจะทำงานในชุดเริ่มต้นของไฟล์ที่แยกไฟล์ไบนารีที่ไม่รู้จัก หากคุณส่งชื่อไฟล์มันจะค้นหาไฟล์ทั้งหมดที่คุณส่ง นี้จะอธิบายถึงความแตกต่างระหว่างและack fooack foo **

แอ๊ 1

ใน ack 1.x ให้ใช้การตั้งค่าสถานะ-aเพื่อบอก ack ไม่ให้ข้ามไฟล์ที่มีชนิดที่ไม่รู้จัก

คุณสามารถทำให้นามแฝงถ้าคุณต้องการธงว่าไม่บ่อยกว่า: เพิ่มบรรทัดalias ack='ack -a'ในของคุณหรือ~/.bashrc ~/.zshrcหากคุณตั้งค่านามแฝงนี้และต้องการโทรackโดยไม่มีตัวเลือกการโทร\ack(แบ็กสแลชจะปิดใช้งานการขยายนามแฝง) สคริปต์ไม่ได้รับผลกระทบจาก alias เพียงเชลล์แบบโต้ตอบเท่านั้น

หรือคุณสามารถเพิ่มตัวเลือกที่คุณ-a~/.ackrc

การจับคู่ในไฟล์ไบนารีจะถูกระบุว่าเป็น "การแข่งขัน Binary ไฟล์ test1" ไม่มีวิธีปิดใช้งานลักษณะการทำงานนี้โดยไม่แก้ไขตัวเอง Ack (อย่างน้อยเพิ่มปลั๊กอิน)

แอ๊ 2

ใน ack 2.0 -aตัวเลือกจะถูกลบออก สิ่งที่คุณสามารถทำได้คือการกำหนดประเภทที่ตรงกับไฟล์ทั้งหมดและใช้-kตัวเลือกเพื่อให้แอ๊รวมไฟล์ทั้งหมดของประเภทนั้น โปรดทราบว่าประเภทไฟล์จะถูกประมวลผลตามลำดับที่คาดเดาไม่ได้ซึ่งจะทำให้ชุดไบนารีประเภทสุ่มถูกประมวลผลตามปกติแทนที่จะเป็นประเภทปกติ

ack --type-set='all:match:.*' -k foo

วิธีนี้การแข่งขันจะถูกพิมพ์แม้สำหรับไฟล์ที่อาจจะดูเป็นเลขฐานสอง .ackrcในฐานะที่เป็นข้างต้นคุณสามารถเพิ่มตัวเลือกเหล่านี้เพื่อนามแฝงหรือของคุณ


1
นั่นเป็นเรื่องลับๆล่อๆ @Gilles
Andy Lester

@AndyLester ทำไมตัวเลือก -a ถูกนำออกไป "นี่เป็นเพราะ" ในทางกลับกันไม่ได้อธิบายว่าทำไมฉันไม่สามารถค้นหาประเภทไฟล์ที่ไม่รู้จักได้อีกต่อไป
Yann Dìnendal

เนื่องจากพฤติกรรม -a ของ 1.x เพื่อค้นหาไฟล์ข้อความทั้งหมดที่ไม่รู้จักเป็นค่าเริ่มต้นใน 2.0
Andy Lester

2
แปลกฉันมีไฟล์ js ขนาดเล็กที่แม้แต่ชุดการจับคู่ทุกประเภทแบบพิเศษไม่สามารถหาได้ ...
Izkata

ฉันมาที่นี่เพราะสิ่งนั้น: ข้อความในไฟล์ js ที่ย่อขนาดซึ่งไม่ได้แยกวิเคราะห์โดย ack ฉันคิดว่าคำตอบจะเป็นเหมือน "เพิ่ม -a" ... ฉันไม่พอใจ
Luciano Fantuzzi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.