ค้นหา -print0 | xargs -0 grep ไม่ทำงานตามที่คาดไว้ใน Ubuntu 10.04


0

ฉันมีปัญหาแปลก ๆ เล็กน้อย

ถ้าฉันวิ่ง:

find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' | xargs grep -i users

ฉันได้รับข้อผิดพลาดในการโหลดชื่อไฟล์ที่มีช่องว่าง แต่ก็มีบางไฟล์ที่ตรงกัน

อย่างไรก็ตามหากฉันลองต่อไปนี้เพื่อจัดการชื่อไฟล์ที่มีช่องว่างอย่างถูกต้องจะไม่มีการคืนค่าที่ตรงกัน:

find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' -print0 | xargs -0 grep -i users

ผมทำอะไรผิดหรือเปล่า? คำสั่งที่สองควรส่งคืนฉันอย่างน้อยก็เป็นไฟล์ที่เหมือนกันกับไฟล์แรก แต่ฉันไม่พบรายการใด

shell  find  xargs 

ทำไมคุณไม่เพิ่ม -exec grep -i users {} \; แทนการใช้ xargs ?

มันยังไม่ทำงาน มันทำงานได้โดยไม่ต้องเพิ่ม -o-iname ' .pl '-o -iname' .html 'ข้อแม้ว่า

คำตอบ:


2

และคำตอบคือ:

find . \( -iname '*.php' -o -iname '*.pl' -o -iname '*.html' \) -print0 | xargs -r0 grep -i users

วิธีนี้ใช้ได้ผล ฉันไม่เคยเห็นมาก่อน แต่มีเพื่อนร่วมงานคนหนึ่งบอกฉันเกี่ยวกับเรื่องนี้


หรือ -iname '*.php' -print0 -o -iname '*.pl' -print0 ......
Jonathan Leffler

คุณสามารถใช้ \( -iname '*.php' ... \) -exec grep -i users +ที่เครื่องหมายบวกหมายถึง 'สร้างบรรทัดคำสั่งเช่น xargs โดยไม่จำเป็นต้องใช้ xargs ' การใช้เครื่องหมายทวิภาค \; จะหมายถึงรัน grep สำหรับแต่ละไฟล์ตามที่พบ
Jonathan Leffler

0

คุณไม่จำเป็นต้องใช้ print0 และ xargs ฟังก์ชั่นนี้สร้างขึ้นแล้วในการค้นหา:

find . -iname "*.php" -o -iname "*.pl" -o -iname "*.html" -exec grep -i users {} + 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.