아마도 조금 이상 할 수 있습니다.이 작업을 수행 할 수있는 다른 도구가있을 수 있습니다.
다음 클래식 bash 명령을 사용하여 일부 문자열이 포함 된 모든 파일을 찾습니다.
find . -type f | xargs grep "something"
여러 깊이에 많은 파일이 있습니다. . “something”의 첫 번째 발생으로 충분하지만 find는 계속 검색하고 나머지 파일을 완료하는 데 오랜 시간이 걸립니다. 내가 원하는 것은 grep back의 “feedback”과 같은 것입니다. find는 더 많은 파일 검색을 중지 할 수 있습니다. 그런 일이 가능합니까?
답변
단순히 find 영역 내에 두십시오.
find . -type f -exec grep "something" {} \; -quit
작동 방식 :
-exec
는 -type f
는 true가됩니다. grep
는 0
(성공 / true)를 div id = “70324 b5a47 “>
에 일치하는 항목이 있으면 -quit
가 트리거됩니다.
답변
find -type f | xargs grep e | head -1
정확히 수행합니다. head
가 종료되면 파이프의 중간 요소에”깨진 파이프 “신호를 보내고 차례로 종료하고 find
에 알립니다. 이를 확인하는
xargs: grep: terminated by signal 13
와 같은 알림이 표시됩니다.
댓글
- 설명과 대안을위한 +1, 다른 답변은 더 자급 자족하기 때문에 더 우아하게 보이지만
답변
도구를 변경하지 않고이 작업을 수행하려면 : (xargs를 좋아합니다)
#!/bin/bash find . -type f | # xargs -n20 -P20: use 10 parallel processes to grep files in batches of 20 # grep -m1: show just on match per file # grep --line-buffered: multiple matches from independent grep processes # will not be interleaved xargs -P10 -n20 grep -m1 --line-buffered "$1" 2> >( # Error output (stderr) is redirected to this command. # We ignore this particular error, and send any others back to stderr. grep -v "^xargs: .*: terminated by signal 13$" >&2 ) | # Little known fact: all `head` does is send signal 13 after n lines. head -n 1
댓글
- +1은 xargs가 이러한 멀티 태스킹 기능을 가질 것이라는 것을 결코 알지 못했습니다. 다른 의견도 감사드립니다! 🙂