"file" 명령 결과를 find 명령에 전달합니다.

"file" 명령 결과를 find 명령에 전달합니다.

저는 Over the Wire - Bandit 전쟁 게임의 레벨 4를 통과하려고 합니다. 이 레벨에서는 폴더에 있는 사람이 읽을 수 있는 고유한 파일에 저장된 비밀번호를 찾아야 합니다.

이제 파일이 몇 개 밖에 없으므로 각 파일에 대해 명령을 사용하여 해당 유형을 확인한 file후 ASCII 파일을 연 것을 발견했습니다. 이 검색을 자동화할 수 있도록 file결과를 find명령 에 전달 하는 방법이 있는지 궁금합니다 .

(매우 사소한 질문인 것 같지만 여전히 답을 찾을 수 없습니다.)

미리 감사드립니다

답변1

grep -IASCII가 아닌 파일은 무시됩니다. 이는 비표준 옵션이지만 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 {} +

관련 정보