ปกติฉันจะใช้คำสั่งสไตล์นี้เพื่อรันgrepไฟล์จำนวนมาก:
find / -xdev -type f -print0 | xargs -0 grep -H "800x600"
สิ่งนี้จริง ๆ แล้วทำรายการของทุกไฟล์ในระบบและสำหรับแต่ละไฟล์ดำเนินการgrepด้วยอาร์กิวเมนต์ที่กำหนดและชื่อของแต่ละไฟล์
-xdevอาร์กิวเมนต์บอกพบว่ามันจะต้องละเว้น filesystems อื่น ๆ - นี้เป็นสิ่งที่ดีสำหรับการหลีกเลี่ยง filesystems /procพิเศษเช่น แต่ก็ยังจะไม่สนใจ filesystems ปกติเกินไป - ดังนั้นถ้ายกตัวอย่างเช่นโฟลเดอร์ของคุณ / บ้านเป็นในพาร์ทิชันที่แตกต่างกันก็จะไม่ได้รับการสืบค้น - find / /home -xdev ...คุณจะต้องบอกว่า
-type fหมายถึงค้นหาไฟล์เท่านั้นดังนั้นไดเรกทอรีอุปกรณ์และไฟล์พิเศษอื่น ๆ จะถูกละเว้น (มันจะยังคงเก็บในไดเรกทอรีและดำเนินการgrepกับไฟล์ภายใน - มันจะไม่ทำงานgrepในไดเรกทอรีเองซึ่งจะไม่ทำงาน) และ-Hตัวเลือกในการgrepบอกให้พิมพ์ชื่อไฟล์ในเอาต์พุตเสมอ
findยอมรับตัวเลือกทุกประเภทเพื่อกรองรายการไฟล์ ตัวอย่างเช่น-name '*.txt'ประมวลผลเฉพาะไฟล์ที่ลงท้ายด้วย. txt -size -2Mหมายถึงไฟล์ที่มีขนาดเล็กกว่า 2 เมกะไบต์ -mtime -5หมายถึงไฟล์ที่แก้ไขในช่วงห้าวันที่ผ่านมา เข้าร่วมเหล่านี้พร้อมกับ -a สำหรับและและ -o สำหรับหรือและใช้'('วงเล็บ')'ในการจัดกลุ่มนิพจน์ (ในเครื่องหมายคำพูดเพื่อป้องกันเชลล์จากการตีความพวกเขา) ตัวอย่างเช่น:
find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"
ลองman findดูรายการตัวกรองที่เป็นไปได้ทั้งหมด
Permission deniedข้อผิดพลาดมากมายหรือไม่? คุณเรียกใช้เป็นรูทหรือผู้ใช้ปกติหรือไม่?