ปกติฉันจะใช้คำสั่งสไตล์นี้เพื่อรัน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
ข้อผิดพลาดมากมายหรือไม่? คุณเรียกใช้เป็นรูทหรือผู้ใช้ปกติหรือไม่?