題 Mac OS X - NTFS USB驅動器的文件權限問題


我可以在NTFS外部USB驅動器中讀/寫文件。

我在存儲在NTFS外部驅動器上的大型文件(如AVI / MKV)存在一些問題。這些文件看起來是灰色的Finder,並始終使用Finder,當我“打開”我的視頻播放器時,我收到一個奇怪的錯誤:

項目“file.avi”由Mac OS X使用,無法打開。

好吧,我找到了一個解決方法:如果我拖放 file.avi 進入我的視頻播放器一切正常。

但實際上我無法弄清楚為什麼會出現這個問題。

請考慮我沒有安裝任何NTFS自定義驅動程序(即MacFUSE或NTFS-3g)。 要在R / W中安裝我的NTFS USB驅動器,我只修改了 /etc/fstab,添加以下行:

LABEL=WD320 none ntfs rw

8
2018-06-24 10:15


起源


這只發生在媒體文件(例如視頻)上嗎?你能明確排除一些文件類型嗎? - slhck
您可以嘗試的另一件事是只安裝NTFS-3g並查看它是否適用。 - slhck
非技術解決方案是使用無用的Quick Time Player(QTP)使用“快速查看”打開灰色文件>雙擊(或右鍵)單擊文件名>快速查看這僅適用於QTP可以打開的文件,例如mp4 avi等。它不會打開mkv文件。
要徹底解決問題,您可以通過將文件從外部硬盤(而不是將它們從計算機的HD中復制)傳輸到NTFS HD來創建文件。費力,當然,然後可以直接訪問文件


答案:


我發現了 一個線程 這涉及同一主題。文件顯示為灰色,無法使用相同的錯誤消息打開。

以下是(希望)解決它的步驟:

  • 打開終端並運行

    xcode-select --install
    
  • 以上將安裝XCode命令行工具

  • 然後,跑

    GetFileInfo /Volumes/WD320/yourfile.avi
    
  • 應該有關於文件類型和創建者以及其他文件屬性的信息

  • 現在,通過調用更改這些屬性

    SetFile -c "" -t "" /Volumes/WD320/yourfile.avi
    
  • 現在文件應該播放

我顯然無法嘗試(我通常會這樣做),但也許它會有所幫助。


22
2018-06-24 11:28



任何人都在意解釋為什麼要進行downvote? @NSGod實際上將我的答案稱為嘗試的東西 - 他(非常好)的答案只解釋了技術背景。 - slhck
很好。非常感謝這個建議:) - freedev
您是否可以不再在Finder文件屬性中編輯這些字段?它們似乎位於@NSGod給出的答案中給出的屏幕截圖中的可編輯文本框中。如果可以,那可以解釋一個downvote,如果你建議下載一個不必要的程序。 - trlkly
@trikly:不,我的答案中顯示的窗口是Rainer Brockerhoff的Xray應用程序的屏幕截圖(brockerhoff.net/xray)。 Mac OS X Finder從未能夠通過GUI直接編輯文件類型和創建者代碼(您可以使用AppleScript)。我展示圖像的意圖是試圖更好地說明發生了什麼。 - NSGod
我的NTFS安裝的硬盤文件仍然適用於macOS Sierra :-)謝謝! - Benno


項目“file.avi”由Mac OS X使用,無法打開。

這意味著該項目的文件類型為 'brok' 和創建者代碼 'MACS' 為它設置(並且不清除):

enter image description here

當您使用Finder複製文件時,當Finder首次創建重複文件時,它會設置特殊文件類型 'brok',以及的創建者代碼 'MACS' (Finder本身的創建者代碼),表示該文件正在使用中。 Finder完成創建重複文件後,會將文件類型和創建者代碼重置為原始文件的代碼。

通常情況下,你只會遇到一種情況 'brok' 如果Finder崩潰或在文件複製期間以某種方式中斷,則不會重置文件類型。如果你不是這樣,那麼你所看到的很可能是一個錯誤 rw 支持內置的NTFS驅動程序。

正如slhck所提到的,您應該能夠通過清除文件的文件類型和創建者代碼來清除此反應。


7
2018-06-25 16:49





我對這個問題的回答是將其他幾個帖子(非常感謝)和我自己的經歷的答案拼湊在一起的結果。

背景:我有一個帶有NTFS文件系統的外置硬盤。我想偶爾插上它。之前該卷將安裝為“只讀”。一旦我修復了,卷上的文件就處於無法使用的狀態。為了正確安裝卷並使文件可訪問,我必須執行以下操作:

僅供參考:我是個kornshell用戶。將這些命令調整到首選shell。

$ sudo ksh
<password>

$ mv /sbin/mount_ntfs /sbin/mount_ntfs.orig

$ vi /sbin/mount_ntfs

然後粘貼以下內容:

#!/bin/ksh

# --- direct all script stdout to a temp file for examination
exec > /tmp/ntfs

# --- connect all stderr to stdout
exec 2>&1

# --- get the last argument on the command line - this is the mount point
eval echo \$$# |
read MOUNT_PT
echo "\${MOUNT_PT} = \"${MOUNT_PT}\""
echo

echo "Mounting $@"

# --- call the original ntfs mounter with the arguments handed in
/sbin/mount_ntfs.orig -o rw "$@"

echo "Mounted  $@"

# --- show the result of the mounting operation
mount

# --- fix files at the newly mounted MOUNT_PT that are in the 'brok' state
find "${MOUNT_PT}" -type f |
while read FILE; do

    # ---
    # --- use 'SetFile' to modify the file status
    # ---
    # --- this command line assumes the 'SetFile' command has been installed
    # --- and is available in your PATH
    # ---
    SetFile -c "" -t "" "${FILE}"

done

然後:

$ chmod a+x /sbin/mount_ntfs

$ chown root:wheel /sbin/mount_ntfs

現在,每次插入磁盤時,都會掛載“讀/寫”,磁盤上的文件會重置“brok”狀態。這個腳本對我很有用。你的旅費可能會改變。

請享用 -


2
2017-09-21 21:24





非常感謝 - 我改進了上面的腳本,因為它沒有在我的OSX 10.8.4機器上運行(給出錯誤)並且有點慢。 只需要檢查何時安裝了只讀磁盤... 標有的變化 JCV CHANGED

#!/bin/ksh

# --- direct all script stdout to a temp file for examination
exec > /tmp/ntfs

# --- connect all stderr to stdout
exec 2>&1

# --- get the last argument on the command line - this is the mount point
eval MOUNT_PT=\${$#}
# -- JCV CHANGED: corrected eval expression

echo "\${MOUNT_PT} = \"${MOUNT_PT}\""
echo

echo "Mounting $@"

# --- call the original ntfs mounter with the arguments handed in
/sbin/mount_ntfs.orig "$@"

echo "Mounted  $@"

# --- show the result of the mounting operation
 mount

# --- fix files at the newly mounted MOUNT_PT that are in the 'brok' state
find "${MOUNT_PT}" -type f |
while read FILE; do
  #JCV CHANGED: added check whether file type affected
  GetFileInfo -t "${FILE}"  | read FILETYPE
    if [[ $FILETYPE = "\"brok\"" ]];then
    # ---
    # --- use 'SetFile' to modify the file status
    # ---
    # --- this command line assumes the 'SetFile' command has been installed
    # --- and is available in your PATH
    # ---
    SetFile -c "" -t "" "${FILE}"
    echo "fixing file ${FILE}"
   fi
done

1
2017-07-28 21:04



您能否提及所做的更改以及原因 - 謝謝。 - suspectus
感謝您的回复 - 我試圖在上面的帖子中解釋它。 - JCV
這意味著讀者必須閱讀兩個代碼塊並進行心理比較。一些註釋來描述您所做的事情以及為什麼會有所幫助。 - suspectus
該腳本僅在重新安裝磁盤之前有效 - 然後它必須再次更改參數。我嘗試將setFile參數更改為-c“????” (創建者應用程序未知),它提供了一個持久的解決方案,但它在打開電影時會混淆快速時間(未知文件類型blah blag)。 - JCV