xenserver를 사용하여 디렉토리에있는 각 파일에 대해 명령을 수행하여 명령 출력에서 일부 내용을 가져 와서 파일에 추가하려고합니다.
사용하려는 명령과 필요에 따라 문자열을 grep하는 방법이 명확합니다.
그러나 내가 확실하지 않은 것은 더 이상 파일을 찾을 수 없을 때까지 다음 파일로 이동하여 각 파일 에서이 명령을 수행하는 방법입니다.
xenserver를 사용하여 디렉토리에있는 각 파일에 대해 명령을 수행하여 명령 출력에서 일부 내용을 가져 와서 파일에 추가하려고합니다.
사용하려는 명령과 필요에 따라 문자열을 grep하는 방법이 명확합니다.
그러나 내가 확실하지 않은 것은 더 이상 파일을 찾을 수 없을 때까지 다음 파일로 이동하여 각 파일 에서이 명령을 수행하는 방법입니다.
답변:
grep $PATTERN *
충분할 것입니다. 기본적으로 grep은 모든 하위 디렉토리를 건너 뜁니다. 그러나 당신이 그들을 통해 grep하려는 grep -r $PATTERN *
경우입니다.
grep $PATTERN *.cpp *.h
. 어떤 파일을 grepping해야하는지에 대한보다 구체적인 규칙이 필요한 경우 find
명령을 사용 하십시오 (Rob의 답변 확인).
grep -r x .
결과를 실행 하면 모든 확장자의 모든 파일에서 나옵니다. 달리는 grep -r x *.scss
것보다 결과가 나타나지 않습니다.
*.scss
그렙은 당신이 원하는 모든 파일에 보이지 않도록 현재 디렉토리에있는 파일 어딘가 깊은 하위 디렉토리에 있습니다. --include
옵션을 사용 하여 grep에게 특정 패턴과 일치하는 파일을 재귀 적으로 찾도록 지시 해야합니다 grep -r x --include '*.scss' .
. 또는 그냥 사용 find
하십시오 (Rob의 답변 참조).
찾기를 사용하십시오. 진지하게, 그것이 작동하는 파일을 실제로 볼 수 있기 때문에 가장 좋은 방법입니다.
find . -name "*.sql" -exec grep -H "slow" {} \;
-H는 mac마다 다르며 결과에 파일 이름이 표시됩니다.
xargs
사용하지 않고 출력을 파이프하는 -exec
것이 훨씬 빠릅니다 -exec
. 파일 이름의 공백에 대한 표준 경고가에 적용됩니다 xargs
.
xargs
문법을 잊어 버린다 .
find . -iname "*.sql" -print0 | xargs -0 grep "slow"