내 것도 xdg-mime
실수를 한다. Java 코드가 포함된 .html 파일을 C++ 파일로 인식합니다.
나는 xdg의 내부 구조(예: 파일 유형을 결정하는 방법)를 잘 이해하지 못합니다. 먼저 파일 확장자로 판단하여 이 문제를 해결하는 방법을 알고 싶습니다.
물론 다른 솔루션도 환영합니다. xdg-* 메커니즘에 대한 설명을 환영합니다.
답변1
xdg-mime은 "데스크톱 환경(DE)에 대한 공통 인터페이스 세트"인 xdg-utils라는 스크립트 모음의 일부입니다. 귀하의 구체적인 경우에는 인용하겠습니다.거장댓글여기:
데스크탑 환경이 없다면 xdg-mime을 사용하면 안 됩니다. (또는 다른 xdg 도구). xdg는 상호 운용성을 제공하는 것을 목표로 합니다. 서로 다른 데스크탑 환경 사이에서(하나 없이는 가능하지 않음) xdg를 데스크탑에 구애받지 않는 것으로 간주하지만 "데스크탑 무신론자"는 아닙니다.
xdg-utils의 내부에 관해서는... DE의 쉘 스크립트를 확인하고 발견되면 특정 DE의 파일 유틸리티를 호출하여 특정 작업을 수행합니다. 그놈에서xdg-열기수신 전화gvfs-open그리고xdg 무언극수신 전화gvfs 정보(두 gvfs-* 도구 모두 파일 확장자로 판단하는 데 우선순위를 둡니다). 귀하의 경우에는 DE를 찾을 수 없습니다.xdg 무언극다시 돌아가다file
[1] 파일 콘텐츠 유형에 대한 정보를 가져옵니다. 다음은 xdg-mime의 "일반" DE(또는 다소 알려지지 않은)의 코드 부분입니다:
info_generic() { DEBUG 1 "Running file -i \"$1\"" /usr/bin/file -i "$1" 2> /dev/null | cut -d ":" -f 2 | sed s/"^ "// if [ $? -eq 0 ]; then exit_success else exit_failure_operation_failed fi }
결과가 항상 100% 정확하지는 않다는 것이 사실이지만 file
[1] 그에 대해 할 수 있는 일은 많지 않습니다(제 생각에는 여전히 작업에 가장 적합한 도구입니다). 그러나 파일 확장자(예: Windows)만을 기준으로 MIME 유형을 결정하려는 경우 고유한 스크립트를 작성할 수 있습니다. 다음은 간단한 Python 예제입니다.
#!/usr/bin/python2
import os
import sys
import mimetypes
if len(sys.argv) != 2:
print ("Usage: ./pymime filename")
raise SystemExit
testfile = os.path.abspath(sys.argv[1])
mt = mimetypes.guess_type(testfile, strict=True)[0]
print ("%s" % mt)
sys.exit(0)
이름을 붙이다피미임그리고 다음을 실행하세요:
./pymime yourfile