for
명령문에 지정된 문자열로 시작하는 디렉터리의 파일을 반복하려고 합니다 . 루프 내에서 foo
파일에서 패턴 문자열을 검색하고 싶습니다 . 파일에서 문자열이 발견 echo
되면 $filename
.
#!/ppp/bash
for filename in $(find ~/filesList -type f -name "pge_*")
do
#If 'foo' located echo $filename
done
어떤 조언이라도 대단히 감사하겠습니다.
답변1
find
실행을 위해 grep
:
find ~/filesList -type f -name 'pge_*' -exec grep -lF -- foo {} +
-l
일치하는 파일의 이름을 나열합니다 foo
. -F
이는 표현식이 foo
정규 표현식 대신 고정 문자열로 처리된다는 의미입니다.
답변2
첫 번째 제안 - 루프 find
에서 사용할 필요가 없으며 속도가 느려집니다. for
대신 다음을 수행할 수 있습니다.
for f in ~/filesList/pge_*
다소 중요한 주의 사항은 이 단순화된 버전은 하위 디렉터리를 검색하지 않지만 ~/filesList
이 find
버전은 검색하므로 실제 사용 사례에 따라 단순화하지 못할 수도 있다는 것입니다.
이러한 파일 내에서 검색하려면 다음 구문을 사용해야 합니다 grep
.
if (grep needle haystack > /dev/null 2>&1)
then
echo $f
fi
grep
찾고 있는 바늘을 찾으면 0이 아닌 값을 반환하므로 조건은 TRUE로 평가됩니다 . 나는 > /dev/null 2>&1
결과를 보지 않으려 고 사용합니다 grep
. 건초 더미에서 바늘이 발견 되면 grep
반환 코드는 0이므로 조건은 FALSE이므로 명령문을 우회합니다 then
.