我有一個有點奇怪的問題。
如果我運行:
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
我究竟做錯了什麼?第二個命令應該至少返回與第一個命令相同的匹配文件,但我沒有得到任何匹配。
答案1
答案是:
find . \( -iname '*.php' -o -iname '*.pl' -o -iname '*.html' \) -print0 | xargs -r0 grep -i users
這有效。我以前沒見過,但是有位同事告訴我的。
答案2
你不需要 print0 和 xargs,這個功能已經內建在 find 中:
find . -iname "*.php" -o -iname "*.pl" -o -iname "*.html" -exec grep -i users {} +