O Finder no Mac OS X 10.7 Lion mostra um novo metadado de arquivo, "Data de adição", que rastreia a data em que um item foi adicionado a uma pasta. Após a atualização para 10.7, nenhum dos itens da minha ~/Downloads
pasta possui valores "Data de adição". Gostaria de definir todos os valores vazios de "Data de adição" para corresponder aos valores de "Data de modificação", mas não consigo descobrir como definir o atributo "Data de adição" para um valor específico.
Meu primeiro palpite foi este:
xattr -w com.apple.metadata:kMDItemDateAdded "2012-02-19 16:34:47 +0000" myfile
Mas isso não parece funcionar (embora também não relate um erro).
Respostas:
OK, nova abordagem aqui. Cuidado: não tenho um sistema atualizado para o Lion (meu computador veio com o Lion instalado), portanto não posso testar isso. Código não testado; faça backup antes de tentar este código!
Minha resposta anterior foi baseada na ordem de classificação usada pela pilha de Downloads no Dock. O campo Data de adição no Finder parece ser baseado nas informações do Spotlight, que são difíceis de invadir. Também não é acessível via AppleScript. Mas, parece haver uma solução alternativa.
Crie um novo fluxo de trabalho no Automator.
Defina o fluxo de trabalho para aceitar arquivos ou pastas do Finder adicionando a ação "Solicitar itens do Finder".
Faça com que o fluxo de trabalho execute um AppleScript adicionando a ação "Executar AppleScript".
Use este AppleScript:
Selecione os arquivos que ainda não possuem uma Data de adição (classifique por Data de adição no Finder, selecione a parte da lista sem uma Data de adição) e execute este serviço.
fonte
/.Spotlight-V100
, isso pode ser o melhor possível. Mas eu amo ver uma resposta limpa.$
seu nome, mas eu trabalhei com isso renomeando temporariamente esse arquivo. Para fazer o AppleScript lidar com esses arquivos, minhas pesquisas indicam que você poderia substituirmyfile
comquoted form of myfile
, mas eu não testei isso. Se alguém tentar isso, pode ser mais claro fazer a citação ao definirmyfile
e renomear a variável comoquotedFilePath
.Quando executo
xattr -l
itens na minha pasta Downloads, recebo um campo parecido com o seguinte:Este é um argumento binário. Quando uso o HexFiend para criar um arquivo com esses bytes (sim, eu os inseri manualmente; exploda do passado como inserir código assembler de uma revista na minha Apple] [GS) e salve-o como um arquivo .plist, abri o arquivo no TextWrangler e obteve o seguinte xml descompilado:
Dito isto, enquanto a Apple parece armazenar as datas em XML compilado, o texto sem formatação parece funcionar.
Em outras palavras, se você pode obter a data modificada do arquivo na forma de sequência, pode executar o comando
xattr -w com.apple.metadata:kMDItemDownloadedDate "2012-02-19 16:34:47 +0000" file
para alterar a "data do download", que parece ser o campo realmente classificado, não a Data Real Adicionada.Finalmente, você não encontrou nenhum erro ao adicionar o
kMDItemDateAdded
campo (não utilizado) porque, como aprendi neste artigo ,xattr
definirá com prazer qualquer campo de metadados que você desejar, usado ou não.Esse é o núcleo da resposta. Vou trabalhar para escrever um AppleScript para obter a data de modificação de cada arquivo, verificar se
kMDItemDownloadedDate
está definido e, se não estiver, defina kMDItemDownloadedDate como a data de modificação, mas eu queria publicar o núcleo da resposta.fonte
xattr -p com.apple.metadata:kMDItemDownloadedDate FILENAME_HERE | xxd -r -p | plutil -convert xml1 - -o -
. O xxd converte em dados binários plist, depoisplutil
converte em XML plist e os imprime.xattr -l
e kMDItemDownloadedDate não está listadomdls
. Curioso e curioso. O campo Data de adição também não é armazenado em um xattr para o diretório . Onde esses metadados moram?xattr
é um script python, acho que deve ser possível investigar esse script e descobrir como obter os dados binários do atributo em binário, em vez de hexadecimal, para que você possa alimentá-lo diretamenteplutil
.Não consigo encontrar uma maneira de definir a "Data de adição" mostrada no Finder.
Acredito que você esteja certo de que ele é recuperado do
kMDItemDateAdded
atributo de metadados do índice Spotlight . No entanto, o Spotlight parece derivar isso de alguma maneira.Tentei configurar um atributo de arquivo estendido chamado
com.apple.metadata:kMDItemDateAdded
para um valor de data em um dos vários formatos diferentes, incluindo o formato usado porkMDItemDateAdded
e nenhum deles foi escolhido pelo índice Spotlight, ou seja, independentemente do valor mostradoxattr
, o valor mostrado pormdls
não foi alterado.Eu acho que , embora eu não sei ao certo, que o Spotlight simplesmente define esta data com base na primeira vez que os índices de um arquivo em um local particular, e não verifica quaisquer outros metadados, a fim de gerá-lo. Se você tiver
mv
um arquivo fora de Downloads e voltar a entrar, a Data de Atualização é atualizada para quando foi movido novamente, mas nenhum dos metadados do arquivo parece afetado, apenas os metadados do Spotlight.Portanto, em resumo, acho que o Date Added é armazenado apenas em algum lugar no interior de /.Spotlight-V100, e, a menos que alguém possa sugerir ao Spotlight que atualize uma entrada de metadados para um valor arbitrário, eu posso ' Não vejo uma maneira de fazer isso.
fonte
Obrigado a Daniel Lawson pela solução! Ainda funciona bem, mesmo dois anos depois.
Eu tenho duas adições:
1) Observe que há um pequeno erro no código da resposta aceita.
Está linha:
... tem um apóstrofo extra, acionando um erro "EOF inesperado". Deve ler-se:
2) Mais importante, a partir do Mavericks 10.9.2, a configuração do sistema requer direitos de administrador. Portanto, toda chamada para shell script deve seguir esta fórmula:
Aqui está a versão totalmente modificada do AppleScript, confirmada para o trabalho em 10.9.3:
fonte