저는 Over the Wire - Bandit 전쟁 게임의 레벨 4를 통과하려고 합니다. 이 레벨에서는 폴더에 있는 사람이 읽을 수 있는 고유한 파일에 저장된 비밀번호를 찾아야 합니다.
이제 파일이 몇 개 밖에 없으므로 각 파일에 대해 명령을 사용하여 해당 유형을 확인한 file
후 ASCII 파일을 연 것을 발견했습니다. 이 검색을 자동화할 수 있도록 file
결과를 find
명령 에 전달 하는 방법이 있는지 궁금합니다 .
(매우 사소한 질문인 것 같지만 여전히 답을 찾을 수 없습니다.)
미리 감사드립니다
답변1
grep -I
ASCII가 아닌 파일은 무시됩니다. 이는 비표준 옵션이지만 grep
많은 사람들이 구현합니다.
find thefolder -type f -exec grep -q -I . {} ';' -print
thefolder
이는 ASCII ( 에 따라 ) 또는 그 이하에 있고 비어 있지 않은 모든 파일을 나열합니다 ( 단일 문자를 찾 grep
도록 요청합니다 ).grep
GNU를 사용하면 find
다음에 대한 읽기 권한이 없는 파일을 쉽게 무시할 수도 있습니다.
find thefolder -type f -readable -exec grep -q -I . {} ';' -print
여기서 유일한 차이점은 일부 "권한 거부" 오류를 방지할 수 있다는 것입니다.
grep
재귀 grep 구현을 통해 :
grep -rlI . thefolder
제안한대로 사용하십시오 file
.
find thefolder -type f -exec sh -c 'file "$1" | grep -qi text' sh {} ';' -print
이는 첫 번째 솔루션보다 훨씬 느리지만, file
해당 솔루션이 올바르게 작동한다고 신뢰하면 작동할 수 있습니다.
약간 더 빠릅니다( sh
한 번 또는 몇 번만 실행됨):
find thefolder -type f -exec sh -c '
for pathname do
if file "$pathname" | grep -qi text; then
printf "%s\n" "$pathname"
fi
done' sh {} +