바이너리 파일을 제외한 모든 하위 디렉터리의 모든 일반 파일 목록/찾기

바이너리 파일을 제외한 모든 하위 디렉터리의 모든 일반 파일 목록/찾기

리눅스에서.

할 수 있다는 것을 알고 있지만 find . -type f여기에는 바이너리 파일이 포함되어 있고 find로 해당 파일을 제외하는 방법을 찾을 수 없습니다.

답변1

file /usr/bin/file예를 들어 내 시스템의 출력에는 "binary"라는 단어가 포함되지 않습니다. 사용 가능한 경우 file -i"binary"라는 단어가 포함됩니다. 이 없으면 -i"text"라는 단어가 있는지 테스트하는 것이 더 안정적일 수 있습니다.

find -type f -exec sh -c "file {} | grep text >/dev/null" \; -print

또는

find -type f -exec sh -c "file {} | grep text >/dev/null" \; -ls

사용 -i:

find -type f -exec sh -c "file -i {} | grep -v binary >/dev/null" \; -print

를 사용하는 file것은 경험적 방법을 사용하여 파일 유형을 결정하고 "바이너리" 파일을 구성하는 요소에 대한 확실하고 빠른 정의가 없기 때문에 대략적인 것일 뿐입니다. 빈 파일이 "바이너리"입니까? file그렇다고 말합니다. 또한 file.

답변2

또 다른 방법은 사용자, 그룹 또는 기타 사용자에 대해 실행 권한이 설정된 모든 파일을 제외하는 것입니다.

find . -type f ! -perm /u=x,g=x,o=x

(바이너리가 실행 권한과 같은 경우...)

답변3

실행 권한이 없는 모든 파일을 표시합니다(비록 이는 특별히 바이너리가 아니므로 정확히 필요한 것이 아닐 수도 있음).

ls -l | awk '{if ($1 !~ /x/) print $8}'

답변4

다음 명령을 시도해 보십시오:

find . -type f -exec file "{}" \; | grep -vE "ELF|archive"

관련 정보