예제에 대해 설명하는 것이 좋습니다.
할 수있는 작업 :
find . -name "*.py" -type f > output.txt
하지만 출력을 동일한 파일에 저장하려면 어떻게해야합니까?
find . -name "*.py" -type f -exec grep "something" {} \
그냥 할 수는 없습니다
find . -name "*.py" -type f -exec grep "something" {} \ > output.txt
답변
내가 올바르게 이해한다면 다음과 같이하세요.
find . -name "*.py" -print0 | xargs -0 grep "something" > output.txt
확장자가 .py
, grep
인 모든 파일 찾기 something
행을 output.txt
에 저장합니다. output.txt
파일이 있으면 잘리고 그렇지 않으면 잘립니다. 생성됩니다.
-exec
사용 :
find . -name "*.py" -exec grep "something" {} \; > output.txt
Chris Downs를 통합합니다. 주석 : 위 명령은 find
가 주어진 테스트를 통과하는 경로 이름을 찾는만큼 grep
가 실행되도록합니다 (단일 테스트). 그러나 \;
를 +
로 바꾸면 grep
가 여러 경로 이름으로 호출됩니다. find
(특정 한도까지).
질문 세미콜론 (;)과 더하기 ( +) exec in find 를 사용하여 주제에 대해 자세히 알아보세요.
댓글
를 사용하면 많은 추가 속도를 얻을 수 있습니다. 그리고 xargs
에서 -P6
플래그를 사용하여 6 개의 프로세스 (이 경우)와 병렬로 실행할 수 있습니다 (숫자를 변경해도됩니다. 6에서 더 높거나 낮은 것으로, 컴퓨터 및 검색에서 더 빠른 것을 ' 확인). 참조 : unix.stackexchange.com/questions/131535/ …
\;
대신 id = “dd83a7ad33″> 는 여러 파일을 grep에 전달하고 해당 세트의 파일에 ' 뭔가 ', 모든 파일이 테스트를 통과합니다. 따라서 ' 원하는 작업을 수행하지 못했습니다.
+
\;
대신 div>를 사용하면 실행 시간이 크게 향상됩니다 (ARG_MAX
까지 실행 전에 인수를 경합하므로).grep -H
를 사용합니다.xargs
직전에 div id = “ac06e117b9″>