이미 가지고 있다둘 질문이 주제는 여기에서 논의되지만 둘 다 실제 제목이 아닌 스크립트의 오류를 해결합니다.
파일 유형에 따라 파일에 대한 기본 정보를 얻는 프로그램을 개발하고 싶습니다. 디렉토리, 텍스트, 바이너리 데이터를 구별하고 싶습니다.
지금까지 나는 다음을 사용하고 있습니다 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