사람이 읽을 수있는 파일 이름을 필터링하기 위해 [:print:]
( 인쇄 가능 ) 문자 클래스 이름 을 사용할 수 있습니다 . 해당 클래스에 대한 자세한 내용은에 대한 매뉴얼을 참조하십시오 grep
.
find . -type f -size 1033c -name "[[:print:]]*" ! -executable
다시 한 번 생각하면 "사람이 읽을 수있는"요구 사항은 파일 이름 대신 파일 내용을 참조 할 수 있습니다. 즉, 텍스트 파일을 검색하는 것 입니다. 좀 더 까다 롭습니다. 주석에서 @D_Bye가 제안한 것처럼 file
명령을 사용하여 파일 내용 유형을 결정해야합니다. 그러나 file
파일 이름을 표시하는 작업이 복잡해 지므로 파이프 다음 에 실행하는 것은 좋지 않습니다 . 내가 제안하는 것은 다음과 같습니다.
find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print
다음은 file
-part의 작동 방식입니다.
-exec
술어가 실행 sh -c 'file -b $0 | grep -q text' FILENAME
각각 FILENAME
만족 이전의 모든 조건 (종류, 사이즈, 비 실행).
- 그 파일 각각에 대해, 쉘은 (
sh
)이 짧은 실행 스크립트를 : file -b $0 | grep -q text
, 대체 $0
파일 이름으로.
- 그만큼
file
프로그램은 각각의 파일의 콘텐츠 타입을 결정하고,이 정보를 출력한다. 이 -b
옵션은 테스트 된 각 파일의 이름을 인쇄하지 못하게합니다.
grep
출력을 필터링합니다. file
"text"가 포함 된 행을 검색하여 프로그램에서 . (일반적인 file
명령 출력 결과를 참조하십시오 .)
- 그러나 (quiet) 옵션이 제공
grep
되므로 필터링 된 텍스트를 출력하지 않습니다 -q
. 그것이하는 것은 종료 상태를 변경하는 것입니다. 중 하나에 0
( "true"로 표현 - 필터링 된 텍스트가 발견되었다) 또는 1 (- 텍스트 "오류"를 의미하는 "텍스트" 의 출력에 표시되지 않았다 file
).
- 에서 나오는 참 / 거짓 종료 상태
grep
로 더 전달 sh
에 find
전체 "의 최종 결과의 역할을 -exec sh -c 'file $0 | grep -q text' {} \;
"테스트.
- 경우에는 위의 테스트는 반환 사실 ,
-print
(즉, 테스트 파일의 이름이 인쇄되어 있습니다) 명령이 실행됩니다.