Como removo os "atributos estendidos" em um arquivo no Mac OS X?


260

Eu tenho um script AppleScript que executa um teste de estresse. Parte do teste é abrir, salvar e fechar determinados arquivos. De alguma forma, os arquivos selecionaram alguns "atributos estendidos" que proíbem que os arquivos sejam salvos. Isso faz com que o teste de estresse falhe.

Como removo os atributos estendidos?


Atributos estendidos não podem impedir que um arquivo seja salvo. Tem certeza de que não é um problema de permissões ou uma ACL?
Lily Ballard

Você acabou de atualizar para 10.7.3? Parece que há um bug no qual muitos aplicativos da GUI (incluindo o TextEdit, mas também outros aplicativos - incluindo um que eu escrevi que não faz nada de estranho) agora definem o bit de quarentena nos arquivos. Como o @Bavarious disse, você pode removê-lo usando o @ xattr @. Olhe para o TextWrangler, que é gratuito, e acho que tem um bom suporte ao AppleScript. Disseram-me que não define a quarentena.
Abhi Beckert 03/03

6
Se o abaixo funcionou, você deve aceitar a resposta - que ajuda a tornar o site uma boa base de conhecimentos :-)
Graza

Respostas:


392

Use o xattrcomando Você pode inspecionar os atributos estendidos:

$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine

e use a -dopção para excluir um atributo estendido:

$ xattr -d com.apple.quarantine s.7z
$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms

você também pode usar a -copção para remover todos os atributos estendidos:

$ xattr -c s.7z
$ xattr s.7z

xattr -hmostrará as opções da linha de comando e o xattr tem uma página de manual .


2
A Apple tem uma página de manual disponível online: developer.apple.com/documentation/Darwin/Reference/ManPages/…
Quinn Taylor

Parece que a opção -c foi removida no Mountain Lion (10.8). xattr -h não lista mais -c e produz "-c não reconhecido" quando usado. Muito doloroso agora para remover atributos estendidos um por um.
helioz

1
-cnão está funcionando para mim (OS X 10.6.8). -dtambém não teve nenhum efeito, embora não tenha reclamado. Eu tive que nomear explicitamente cada atributo estendido da seguinte forma: xattr -rd <attrname> <folder/file>(exclui recursivamente). Para descobrir os atributos presentes (provavelmente os mesmos atributos em toda a árvore de diretórios), use xattr <dir/file>como na resposta acima.
mindthief

@mindtheif ninguém mencionou aqui que isso requer as ferramentas de linha de comando xCode. Na versão 10.6.8, chama-se algo diferente. Aqui está um link para um instalador pré-criado no GitHub, para que você não precise instalar todo o xCode para verificar se esse é o seu problema.

5
Com o Xcode instalado no meu sistema 10.8.5, xattr -cfunciona bem para mim (e retirou com êxito todos os metadados).
Doktor J

103

Removendo um único atributo em um único arquivo

Veja a resposta de Bavarious.


Para remover todos os atributos estendidos em um único arquivo

Use xattrcom o -csinalizador para "limpar" os atributos:

xattr -c yourfile.txt



Para remover todos os atributos estendidos em muitos arquivos

Para remover recursivamente atributos estendidos em todos os arquivos em um diretório, combine o -csinalizador "clear" com o -rsinalizador recursivo:

xattr -rc /path/to/directory



Uma dica para usuários do Mac OS X

Tem um longo caminho com espaços ou caracteres especiais?

Abra Terminal.appe comece a digitar xattr -rc, inclua um espaço à direita e, em seguida, arraste o arquivo ou a pasta para a Terminal.appjanela e ele adicionará automaticamente o caminho completo com o escape adequado.


1
-cfalha no Mac OS X 10.5: option -c not recognized. Usamos um para testar no PowerPC da Apple. Parece que a versão de nível inferior do OS X suporta -l, -p, -we -d.
JWW

@cwd: o Finder arrastar e soltar no terminal não funciona com alguns arquivos 'especiais' do Finder, . textClippingcomo os descritos em apple.stackexchange.com/questions/301871/…
ccpizza

@ jww Eu explico por que você recebe o erro na minha resposta abaixo. stackoverflow.com/a/58616002/1896134
JayRizzo

23

Tente usar:

xattr -rd com.apple.quarantine directoryname

Isso cuida da remoção recursiva do atributo traquinas em todos os lugares.


7

Outra abordagem recursiva:

# change directory to target folder:
cd /Volumes/path/to/folder

# find all things of type "f" (file), 
# then pipe "|" each result as an argument (xargs -0) 
# to the "xattr -c" command:
find . -type f -print0 | xargs -0 xattr -c

# Sometimes you may have to use a star * instead of the dot.
# The dot just means "here" (whereever your cd'd to
find * -type f -print0 | xargs -0 xattr -c

-cfalha no Mac OS X 10.5: option -c not recognized. Usamos um para testar no PowerPC da Apple. Parece que a versão de nível inferior do OS X suporta -l, -p, -we -d.
JWW

@ jww Eu explico por que você recebe o erro na minha resposta abaixo. stackoverflow.com/a/58616002/1896134
JayRizzo

3

Resposta (arquivos individuais)


1. Mostre as teclas para usar na seleção.

xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.lastuseddate#PS
    # com.apple.metadata:kMDItemIsScreenCapture
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

2. Escolha uma chave para excluir.

xattr -d com.apple.lastuseddate#PS ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
xattr -d kMDItemIsScreenCapture ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png

3. Mostre as chaves novamente para ver se foram removidas.

xattr -l ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

4. Por fim, REMOVER TODAS as teclas de um arquivo específico

xattr -c ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png

Resposta (Todos os arquivos em um diretório)


1. Mostre as teclas para usar na seleção.

xattr -r ~/Desktop

2. Remova uma chave específica para TODOS OS ARQUIVOS em um diretório

xattr -rd com.apple.FinderInfo ~/Desktop

3. Remova TODAS as teclas de CADA ARQUIVO em um diretório

xattr -rc ~/Desktop

AVISO: Depois de excluí-los, você não os recupera!
ERRO DE FALHA: NÃO EXISTE.


Erros


Eu queria abordar as pessoas do erro. Porque os erros também me deixaram louco ... Em um mac, se você instalar xattrem python, seu ambiente poderá ter um problema.

Existem dois caminhos diferentes no meu mac para xattr

type -a xattr

    # xattr is /usr/local/bin/xattr    # PYTHON Installed Version
    # xattr is /usr/bin/xattr          # Mac OSX Installed Version

Portanto, em um dos exemplos em -cque não funcionará no xargs, é porque no bash você padroniza a versão não-python.

Funciona com -c

/usr/bin/xattr -c

NÃO trabalha com -c

/usr/local/bin/xattr -c
    # option -c not recognized

Meu Shell / Terminal usa como padrão / usr / local / bin / xattr porque my $PATH /usr/local/bin:é anterior ao /usr/bin:que acredito ser o padrão.

Eu posso provar isso porque, se você tentar desinstalar o python xattr, verá:

pip3 uninstall xattr
Uninstalling xattr-0.9.6:
  Would remove:
    /usr/local/bin/xattr
    /usr/local/lib/python3.7/site-packages/xattr-0.9.6.dist-info/*
    /usr/local/lib/python3.7/site-packages/xattr/*
Proceed (y/n)?

Soluções alternativas


Para corrigir option -c not recognizederros.

  1. Desinstale qualquer Python que xattrvocê possa ter:pip3 uninstall xattr
  2. Feche todas as Terminaljanelas e saiaTerminal
  3. Reabra uma nova Terminaljanela.
  4. Execute o xattrcomando novamente e agora deve funcionar.

OU

Se você deseja manter o Python xattr, use

/usr/bin/xattr

para qualquer Shellcomando emTerminal


Exemplo:


A versão do Python xattrnão lida com imagens:

Good-Mac:~ JayRizzo$ xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # Traceback (most recent call last):
    #   File "/usr/local/bin/xattr", line 8, in <module>
    #     sys.exit(main())
    #   File "/usr/local/lib/python3.7/site-packages/xattr/tool.py", line 196, in main
    #     attr_value = attr_value.decode('utf-8')
    # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 2: invalid start byte

Good-Mac:~ JayRizzo$ /usr/bin/xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.lastuseddate#PS
    # com.apple.metadata:kMDItemIsScreenCapture
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

Páginas de manual

PÁGINA DE HOMEM para OSX xattr

PÁGINA DE HOMEM para Python xattr VERSÃO 0.6.4

NOTA: Não consegui encontrar a página de ajuda do python para a VERSÃO 0.9.6 atual

Obrigado pela leitura!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.