Tenha paciência comigo, isso é longo e complicado, mas TL; DR Onde o OSX esconde atributos extras em arquivos (em compartilhamentos ou locais)?
Estamos tendo problemas em nosso ambiente empresarial. Temos uma configuração Oracle ZFS e nossas máquinas OSX são SMB montando o volume.
Um usuário tentou mover uma pasta entre locais e cancelou isso no meio, o que resultou na pasta em ambos os locais ficando esmaecida. No Finder mostra uma data de criação e modificação na pasta 13/06/1943 06:13:00 Em nossas estações de trabalho Linux, quando declaramos o arquivo, ele mostra a criação correta e as datas de modificação. Em seguida, tocamos no arquivo da estação de trabalho Linux ou de uma estação de trabalho OSX e através do terminal podemos ver a pasta e até usar o comando abrir na pasta. Mas através do Finder ele permanece esmaecido e não pode ser aberto. Isso afetou todas as estações de trabalho OSX que acessam este arquivo. Nenhum deles conseguiu ver, mas o Windows e o Linux estavam bem.
Acabamos usando os comandos obsoletos GetFileInfo e SetFile para resolver isso.
Minha pergunta para a comunidade é: onde esses atributos estão sendo armazenados, pois eles não eram visíveis no arquivo usando ls -la ou stat. Mas estávamos lá quando analisamos isso com GetFileInfo. Alguém sabe se o OSX faz algum cache estranho do Samba e o armazena no servidor? ou coloca isso em um arquivo .DS_Store estúpido?
AJUDA!!! por favor
Responder1
O OS X tem algumas maneiras de armazenar seus metadados extras em volumes que não os suportam nativamente:
Em coisas como volumes FAT, ele armazenará os metadados como um arquivo separado com um prefixo "._" no nome do arquivo, usandoAppleDuploformatar. Por exemplo, se o arquivo original fosse "somefile.txt" e você o copiasse para um volume FAT32, os dados seriam copiados para "somefile.txt" e os metadados seriam salvos como "._somefile.txt".
Em um volume NTFS montado sobre SMB (se certas condições que eu não entendo totalmente se aplicarem), ele armazenará os metadados comoFluxos de dados alternativos NTFS.
Não tenho certeza se a implementação SMB do seu servidor Oracle suporta fluxos de dados alternativos, mas acho que sim, e o Mac os está usando para armazenar metadados extras (e o servidor provavelmente os está armazenando como atributos estendidos do ZFS). Você pode procurá-los diretamente no servidor ou também tentar montar o volume a partir de um cliente Windows e ver sestreams.exeposso vê-los.
Responder2
Eu estava recebendo 24 de janeiro de 1984, 3h00, esse é o ovo de páscoa (o dia em que o primeiro Mac foi vendido): carimbo de data / hora durante o trânsito até que a transferência seja concluída (onde houve alguma falha que não corrigiu automaticamente aquela data quando a cópia acabou)
assumindo que as pastas acinzentadas são de nível superior dentro de uma pasta específica (caso contrário, adicione "-recurse" ao comando gci e remova "-maxprofundidade 1" do comando find):
não ADS (em um PowerShell de máquina WinOS):
gci -path 'd:\specificfolder' | % {$_.fullname} | gi -stream *
não AppleDouble (conecte-se à pasta específica boa e, em seguida, à pasta específica ruim (ou seja, a pasta ruim terá "-1" anexado) e depois no terminal):
rm /Volumes/specificfolder-1/._* && rm /Volumes/specificfolder-1/.DS_Store
O Windows está bem com as pastas ruins (e vê as datas corretamente), e você está certo sobre o unix (ou linux) subjacente do Mac vendo a data correta com o ls -la
comando, e todos os MacOS veem a síndrome acinzentada, então não é específico para a máquina que você usou para copiar o tipo de problema (e copiar o arquivo no Windows produzindo uma cópia acinzentada, então o WinOS certamente sabe como transferir essas informações ocultas!).
Portanto, só posso ajudar a identificar onde está o problema e concordar com sua solução (mas observe que clique com o botão direito e obtenha informações ou selecione e comando + i não desapareceu no High Sierra, sistema operacional atual no momento em que este livro foi escrito); no entanto, se você tiver várias pastas esmaecidas: é melhor automatizar; então, para adicionar algo, você pode executar os dois comandos a seguir:
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