awk는 하위 디렉토리의 파일을 검색하지 않습니까?

awk는 하위 디렉토리의 파일을 검색하지 않습니까?

awk를 사용하여 여러 파일에서 특정 문자열을 검색하려고 하는데 반환됩니다.

'Example' is a directory: skipped.

awk를 사용하여 모든 하위 디렉터리와 파일을 검색하는 방법은 무엇입니까?

사용 예,

awk -F: '$3 ~ /example/' * > C:/out.txt

답변1

이는 셸 와일드카드의 문제이지 awk재귀적으로 glob하려면 bash globstar옵션을 활성화해야 합니다.

shopt -s globstar

글로벌 스타

설정된 경우 경로 이름 확장 컨텍스트 **에 사용된 패턴은 모든 파일과 0개 이상의 디렉터리 및 하위 디렉터리와 일치합니다. 패턴 뒤에 /가 오면 디렉터리와 하위 디렉터리만 일치합니다.

그러면 다음을 수행할 수 있습니다.

awk -F: '$3 ~ /example/' ** > C:/out.txt

디렉터리 자체를 건너뛰는 것에 대한 오류가 여전히 발생하지만 해당 디렉터리에서도 반복됩니다. stderr를 /dev/null로 리디렉션하여 오류를 숨길 수 있습니다.

awk -F: '$3 ~ /example/' ** > C:/out.txt 2>/dev/null

답변2

find다음 의 조합을 사용하는 것이 좋습니다 awk.

find -type f -exec awk -F: '$3 ~ /example/' {} > c:/out.txt \;

노트: find*아래 의견에서 올바르게 지적한 것처럼 간단한 교체가 아닙니다 . find찾고 있는 파일 세트를 정확하게 반환하려면 매개변수를 조정해야 할 수도 있습니다 .

노트:A >(에 상대적 )는 리디렉션되는 출력 >>이기 때문에 여전히 필요합니다 .find

노트:이것을 사용하는 경우에는 cmderWindows find 대신 GNU find를 호출하도록 주의해야 합니다 find.exe. 바라보다여기이러한 모호함을 극복할 수 있는 방법을 찾으십시오.

관련 정보