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