Greyed Out Folder в Finder (OSX) в сети SMB Поделиться

Имейте в виду, это долго и сложно, но TL;DR. Где OSX скрывает дополнительные атрибуты в файлах (в общих или локальных)?

У нас есть проблемы в нашей корпоративной среде. У нас есть установка Oracle ZFS, и наши машины OSX монтируют том в SMB.

Пользователь попытался переместить папку между местоположениями и отменил это на полпути, в результате папка в обоих местоположениях стала серой. В Finder он показывает дату создания и изменения в папке 13.06.1943 06:13:00 На наших рабочих станциях linux, когда мы регистрируем файл, он показывает правильные даты создания и изменения. Затем мы прикасаемся к файлу с рабочей станции linux или рабочей станции OSX, и через терминал мы можем увидеть папку и даже использовать команду open для этой папки. Но через Finder он остается серым и не может быть открыт. Это затронуло все рабочие станции OSX, обращающиеся к этому файлу. Никто из них не мог видеть это, но Windows и Linux были в порядке.

Мы решили использовать устаревшие команды GetFileInfo и SetFile для решения этой проблемы.

Мой вопрос к сообществу: где хранятся эти атрибуты, так как они не были видны в файле с помощью ls -la или stat. Но были там, когда мы смотрели на это с GetFileInfo. Кто-нибудь знает, если OSX делает странное кэширование Samba и сохраняет его на сервере? или помещает это в тупой файл.DS_Store?

ПОМОГИТЕ!!! PLZ

2 ответа

В OS X есть несколько способов хранения своих дополнительных метаданных на томах, которые их не поддерживают:

  • На таких вещах, как тома FAT, метаданные будут храниться в виде отдельного файла с префиксом "._" в имени файла в формате AppleDouble. Например, если исходный файл был "somefile.txt" и вы скопировали его на том FAT32, данные будут скопированы в "somefile.txt", а метаданные будут сохранены как "._somefile.txt".

  • На томе NTFS, смонтированном через SMB (если применимы определенные условия, которые я не совсем понимаю), он будет хранить метаданные в виде альтернативных потоков данных NTFS.

Я не уверен, что реализация SMB вашего сервера Oracle поддерживает альтернативные потоки данных, но я предполагаю, что это так, и Mac использует их для хранения дополнительных метаданных (и сервер, вероятно, хранит их как расширенные атрибуты ZFS). Вы можете найти их непосредственно на сервере или попробовать смонтировать том из клиента Windows и посмотреть, сможет ли их увидеть streams.exe.

Я получал 24 января 1984 г. 3:00, это пасхальное яйцо (день, когда был продан первый Mac): во время отметки времени прохождения, пока передача не будет завершена (где был какой-то сбой, который не автоматически исправлял ту дату, когда копия была закончена)

предполагая, что серые папки находятся на верхнем уровне внутри специальной папки (в противном случае добавьте "-recurse" в команду gci и удалите "-maxdepth 1" из команды find):

не ADS (на PowerShell для WinOS):

    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 наверняка знает, как передать этот скрытый файл). Информация!).

Так что я могу только помочь точно определить, в чем заключается проблема, и согласиться с вашим решением (но учтите, что щелкните правой кнопкой мыши и выберите "Информация" или выберите "+" и "Команда +" в 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
Другие вопросы по тегам