Text

如何為文本格式修復 xdg-mime

  • September 10, 2012

xdg-mime犯了錯誤。它將包含 Java 程式碼的 .html 文件辨識為 C++ 文件。

我不太了解 xdg 的內部機制(例如它如何確定文件類型)。我想知道如何通過優先考慮文件副檔名來解決這個問題。

當然也歡迎其他解決方案。並且更歡迎對 xdg-* 機制的解釋。

xdg-mime 是稱為 xdg-utils 的腳本集合的一部分,“一組桌面環境 (DE) 的通用介面”。在您的特殊情況下,我將在此處引用MestreLion的評論:

如果您沒有任何桌面環境,則不應使用 xdg-mime (或任何其他 xdg 工具)。xdg 旨在提供 不同桌面環境之間的互操作性,但不是在沒有桌面環境時。 將 xdg 視為與桌面無關,但不是“桌面無神論者”

至於 xdg-utils 的內部機制……它們只是檢查 DE 的 shell 腳本,如果找到,則呼叫該特定 DE 的文件工具來執行特定任務。在 GNOME中, xdg-open呼叫gvfs-openxdg-mime呼叫gvfs-info(這兩個 gvfs-* 工具都優先通過文件副檔名進行判斷)。在您的情況下,沒有找到 DE,因此xdg-mime回退到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 }

雖然這是真的file

$$ 1 $$結果並不總是100%準確,對此您無能為力(它仍然是IMO這項工作的最佳工具)。但是,如果您只想根據文件副檔名(例如 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並執行:

./pymime yourfile

引用自:https://unix.stackexchange.com/questions/47524