
명령문에 명시된 문자열로 시작하는 디렉터리의 파일을 반복하려고 합니다 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
.