網路 SMB 共享上 Finder (OSX) 中的資料夾呈灰色

網路 SMB 共享上 Finder (OSX) 中的資料夾呈灰色

請耐心等待,這又長又複雜,但是 TL;DR OSX 在哪裡隱藏檔案的額外屬性(共用或本地)?

在我們的企業環境中遇到了問題。我們有一個 Oracle ZFS 設置,我們的 OSX 機器以 SMB 方式掛載該磁碟區。

使用者嘗試在位置之間移動資料夾並中途取消,這導致兩個位置的資料夾均呈現灰色顯示。在 Finder 中,它顯示了資料夾 06/13/1943 06:13:00 的建立和修改日期。然後我們從 Linux 工作站或 OSX 工作站觸摸該文件,透過終端機我們可以看到該資料夾,甚至可以在該資料夾上使用開啟命令。但透過Finder,它保持灰色且無法打開。這會影響所有存取該檔案的 OSX 工作站。他們都看不到它,但 Windows 和 Linux 都很好。

我們最終使用已棄用的 GetFileInfo 和 SetFile 命令來解決此問題。

我向社區提出的問題是,這些屬性儲存在哪裡,因為使用 ls -la 或 stat 在檔案中看不到它們。但是當我們用 GetFileInfo 查看它時,就在那裡。有誰知道 OSX 是否做了一些奇怪的 Samba 快取並將其儲存在伺服器上?或將其放入愚蠢的 .DS_Store 檔案中?

幫助! PLZ

答案1

OS X 有幾種方法可以將其額外元資料儲存在本身不支援它們的磁碟區上:

  • 在 FAT 卷之類的東西上,它將元資料儲存為一個單獨的文件,文件名稱上帶有“._”前綴,使用蘋果雙打格式。例如,如果原始檔案是“somefile.txt”,並將其複製到 FAT32 卷,則資料將複製到“somefile.txt”,則元資料將儲存為“._somefile.txt”。

  • 在透過 SMB 安裝的 NTFS 磁碟區上(如果我不完全理解的某些條件適用),它將把元資料儲存為NTFS 備用資料流

我不確定您的 Oracle 伺服器的 SMB 實作是否支援備用資料流,但我的猜測是支持,而 Mac 正在使用它們來儲存額外的元資料(並且伺服器可能將它們儲存為 ZFS 擴充屬性)。您可以直接在伺服器上尋找它們,或者也可以嘗試從 Windows 用戶端安裝磁碟區並查看是否流.exe可以看到他們。

答案2

我收到的是1984 年1 月24 日3:00A,這是復活節彩蛋(第一台Mac 售出的那一天):在傳輸時間戳期間,直到傳輸完成(其中存在一些故障,當副本時沒有自動修復該日期)已經完成了)

假設灰顯資料夾位於特定資料夾內的頂層(否則,將“-recurse”新增至 gci 命令並從 find 命令中刪除“-max深度 1”):

不是 ADS(在 WinOS 機器 powershell 上):

    gci -path 'd:\specificfolder' | % {$_.fullname} | gi -stream *

不是AppleDouble(連接到好的特定資料夾,然後連接到壞的特定資料夾(即壞的資料夾將附加「-1」),然後在終端中):

    rm /Volumes/specificfolder-1/._*  && rm /Volumes/specificfolder-1/.DS_Store

Windows 可以處理壞資料夾(並且可以正確地看到日期),並且您對 Mac 的 unix(或 linux)透過命令看到正確的日期是正確的ls -la,並且所有MacOS 都會看到灰色綜合症,因此它不是特定的到您用來複製問題類型的電腦(並在 Windows 中複製文件,產生灰色副本,因此 WinOS 當然知道如何傳輸該隱藏訊息!)。

因此,我只能幫助找出問題所在,並同意您的解決方案(但請注意,右鍵單擊並獲取資訊或選擇並命令+i 在撰寫本文時的當前作業系統 High Sierra 中尚未消失);但是,如果您有一堆資料夾呈灰色:更好的自動化;因此,要添加一些內容,您可以執行以下兩個命令:

    find /Volumes/specificfolder/ -maxdepth 1 -type d -exec getfileinfo {} \; \
    | egrep "directory|created" | sed -e 's/directory: "\(.*\)"/\1/' \ 
    | sed -e 's/created: \(.*\)/\1/' \
    | sed -e 's#/Volumes/specificfolder#/Volumes/specificfolder-1#' > temp.txt


    while read oddline; do read evenline; setfile -d "$evenline" "$oddline"; \
    done < temp.txt

相關內容