![파일이 텍스트 파일인지 어떻게 알 수 있나요?](https://linux55.com/image/183324/%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%B8%EC%A7%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%95%8C%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
이미 가지고 있다둘 질문이 주제는 여기에서 논의되지만 둘 다 실제 제목이 아닌 스크립트의 오류를 해결합니다.
파일 유형에 따라 파일에 대한 기본 정보를 얻는 프로그램을 개발하고 싶습니다. 디렉토리, 텍스트, 바이너리 데이터를 구별하고 싶습니다.
지금까지 나는 다음을 사용하고 있습니다 file
:
case "$(file --dereference $arg)" in
*directory) ls -l --color=auto --almost-all --human-readable --group-directories-first --file-type --dereference-command-line "$@";;
*text*|*JSON*) bat --style header "$@";;
esac
이것은 대부분 작동하지만 보시다시피 예외를 추가해야 했습니다.JSON다음과 같이 file
식별됩니다.JSON 데이터언급되지 않은텍스트. 문제는 더 많은 예외가 있고 이를 개별적으로 추가하고 싶지 않다는 것입니다.
file
콘텐츠 유형에 대한 보다 일반적인 정보를 다른 표준 프로그램에서 얻을 수 있는 방법이 있습니까?
답변1
몇 가지 노력 끝에 나는 좋은 해결책을 찾았습니다.
case "$(file --dereference --mime $arg)" in
*inode/directory*) ls -l --color=auto --almost-all --human-readable --group-directories-first --file-type --dereference-command-line "$@";;
*binary) ;;
*) bat --style header "$@";;
esac
이는 본질적으로 방법을 반대로 합니다. file --mime
즉, 문자 세트를 출력합니다.바이너리텍스트가 아닌 모든 파일에 대해. 그러면 그렇지 않은 모든 것을 처리하게 됩니다.바이너리텍스트로는 잘 작동하는 것 같습니다.
디렉토리에 관심이 없다면 바이너리 파일로도 분류되므로 다음을 사용할 수 있습니다.
case "$(file --dereference --mime $arg)" in
*binary) echo "$arg is not text";;
*) echo "$arg is text";;
esac