我有超過100,000個文件的目錄。我想知道是否字符串"str1"
作爲任何這些文件的內容的一部分存在。grep - 讀取的文件數量有限
命令: grep -l 'str1' *
需要太長時間才能讀取所有文件。
如何找到grep
停止閱讀任何進一步的文件,如果它發現匹配?任何一班?
注意:我試過grep -l 'str1' * | head
,但是這個命令的耗時與上一次相同。
我有超過100,000個文件的目錄。我想知道是否字符串"str1"
作爲任何這些文件的內容的一部分存在。grep - 讀取的文件數量有限
命令: grep -l 'str1' *
需要太長時間才能讀取所有文件。
如何找到grep
停止閱讀任何進一步的文件,如果它發現匹配?任何一班?
注意:我試過grep -l 'str1' * | head
,但是這個命令的耗時與上一次相同。
在您的命令args中命名100,000個文件名會導致問題。它可能超過了shell命令行的大小。
但你沒有,如果你使用遞歸的選項與目錄中的文件是(這是.
,如果你要搜索當前目錄中的文件)的只是名字來命名的所有文件:
grep -l -r 'str1' . | head -1
除了'-r'不是非常標準的... –
對於一些額外的表現,我會在'LC_ALL =「C」grep -m1 -l -r'str1'中折騰。 | head -1' – bishop
@gniourf_gniourf,OP的問題被標記爲[tag:linux],所以我認爲假設他們使用GNU grep是安全的。 –
使用,以便grep在找到文件中的第一個匹配項後停止。這對於大型文本文件非常有效。
grep -m 1 str1 * /dev/null | head -1
如果有一個文件,那麼上面的/ dev/null將確保grep在輸出中打印出文件名。
如果你想在任何文件中找到的第一個匹配後停止:當你有大量的文件目錄
for file in *; do
if grep -q -m 1 str1 "$file"; then
echo "$file"
break
fi
done
的for
循環也節省您從too many arguments
問題。
非常好。我希望找到一個班輪,但是這些言論將會做到。 – user2070775
請注意,OP已經在使用'-l',它使第一次匹配後'grep'停止。 –
'*'中的文件將永遠不會受到「太多爭論」的影響,這是一個解決方法。例如,參見:http://www.in-ulm.de/~mascheck/various/argmax/ –
該命令是否在少量文件的目錄中工作? –
也許,已經在這裏回答:http://stackoverflow.com/questions/14093452/grep-only-the-first-match-and-stop –
'頭-1'將做伎倆 –