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