Потерпите меня, это долго и сложно, но TL; DR Где OSX скрывает дополнительные атрибуты файлов (в общих или локальных)?
У нас возникли проблемы в нашей корпоративной среде. У нас есть установка Oracle ZFS, и наши машины OSX монтируют том по SMB.
Пользователь попытался переместить папку между местоположениями и отменил это на полпути, в результате чего папка в обоих местоположениях была неактивна. В Finder он показывает дату создания и изменения в папке 13.06.1943 06:13:00. С наших рабочих станций Linux, когда мы просматриваем файл, он показывает правильные даты создания и изменения. Затем мы касаемся файла с рабочей станции linux или рабочей станции OSX, и через терминал мы можем увидеть папку и даже использовать команду открытия для папки. Но через Finder он остается серым и не может быть открыт. Это затронуло все рабочие станции OSX, обращающиеся к этому файлу. Никто из них не видел этого, но Windows и Linux были в порядке.
В итоге мы использовали устаревшие команды GetFileInfo и SetFile, чтобы решить эту проблему.
Мой вопрос к сообществу: где хранятся эти атрибуты, поскольку они не были видны в файле с помощью ls -la или stat. Но были там, когда мы смотрели на это с помощью GetFileInfo. Кто-нибудь знает, делает ли OSX какое-то странное кеширование Samba и хранит ли его на сервере? или помещает это в дурацкий файл .DS_Store?
ПОМОГИТЕ!!! PLZ
В 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 A, это пасхальное яйцо (день, когда был продан первый Mac): во время перехода отметка времени до завершения передачи (где был какой-то сбой, который не исправлял эту дату автоматически, когда копия была закончена)
предполагая, что выделенные серым цветом папки находятся на верхнем уровне внутри специальной папки (в противном случае добавьте «-recurse» в команду gci и удалите «-maxdepth 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