Come rimuovo gli "attributi estesi" su un file in Mac OS X?


261

Ho uno script AppleScript che esegue uno stress test. Parte del test consiste nell'aprire, salvare e chiudere determinati file. In qualche modo, i file hanno acquisito alcuni "attributi estesi" che vietano il salvataggio dei file. Ciò causa il fallimento dello stress test.

Come rimuovo gli attributi estesi?


Gli attributi estesi non possono impedire il salvataggio di un file. Sei sicuro che non sia un problema di autorizzazioni o un ACL?
Lily Ballard,

Hai appena effettuato l'aggiornamento a 10.7.3? Sembra che ci sia un bug in cui molte app GUI (incluso TextEdit, ma anche altre app - inclusa una che ho scritto io stesso che non fa nulla di strano) ora impostano il bit di quarantena sui file. Come diceva @Bavarious, puoi rimuoverlo usando @ xattr @. Cerca TextWrangler, che è gratuito e penso che abbia un buon supporto AppleScript. Mi è stato detto che non imposta il bit di quarantena.
Abhi Beckert

6
Se il seguito ha funzionato, dovresti accettare la risposta - aiuta a rendere questo sito web una buona base di conoscenze :-)
Graza

Risposte:


392

Usa il xattrcomando È possibile controllare gli attributi estesi:

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

e usa l' -dopzione per cancellare un attributo esteso:

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

puoi anche usare l' -copzione per rimuovere tutti gli attributi estesi:

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

xattr -hti mostrerà le opzioni della riga di comando e xattr ha una pagina man .



Sembra che l'opzione -c sia stata rimossa in Mountain Lion (10.8). xattr -h non elenca più -c e produce "-c non riconosciuto" quando usato. Molto doloroso ora per rimuovere gli attributi estesi uno per uno.
Helioz,

1
-cnon funziona per me (OS X 10.6.8). -dinoltre non ha avuto alcun effetto sebbene non si sia lamentato. Ho dovuto nominare esplicitamente ogni attributo esteso in questo modo: xattr -rd <attrname> <folder/file>(elimina ricorsivamente). Per scoprire gli attributi presenti (probabilmente gli stessi attributi nell'intero albero di directory) usare xattr <dir/file>come nella risposta sopra.
mindthief

@mindtheif nessuno ha menzionato qui che questo richiede gli strumenti da riga di comando xCode. Il 10.6.8 si chiama qualcosa di diverso. Ecco un link a un programma di installazione pre-costruito su GitHub, quindi non è necessario installare tutto xCode per vedere se questo è il tuo problema.

5
Con Xcode installato sul mio sistema 10.8.5, xattr -cfunziona bene per me (e ha rimosso correttamente tutti i metadati).
Doktor J,

103

Rimozione di un singolo attributo su un singolo file

Vedi la risposta di Bavarious.


Per rimuovere tutti gli attributi estesi su un singolo file

Utilizzare xattrcon il -cflag per "cancellare" gli attributi:

xattr -c yourfile.txt



Per rimuovere tutti gli attributi estesi su molti file

Per rimuovere ricorsivamente gli attributi estesi su tutti i file in una directory, combina il -cflag "cancella" con il -rflag ricorsivo:

xattr -rc /path/to/directory



Un consiglio per gli utenti di Mac OS X.

Hai un lungo percorso con spazi o caratteri speciali?

Apri Terminal.appe inizia a digitare xattr -rc, includi uno spazio finale, quindi trascina il file o la cartella nella Terminal.appfinestra e aggiungerà automaticamente l'intero percorso con la corretta escape.


1
-cfallisce su OS X 10.5: option -c not recognized. Ne usiamo uno per i test su PowerPC di Apple. Sembra che la versione di livello inferiore di supporti OS X -l, -p, -we -d.
JWW

@cwd: il Finder trascina e rilascia nel terminale non funziona con alcuni file del Finder "speciali" come . textClippingquelli descritti in apple.stackexchange.com/questions/301871/…
ccpizza,

@jww Spiego perché si ottiene l'errore nella mia risposta di seguito. stackoverflow.com/a/58616002/1896134
JayRizzo

23

Prova a usare:

xattr -rd com.apple.quarantine directoryname

Questo si occupa di rimuovere ricorsivamente l'attributo fastidioso ovunque.


7

Un altro approccio ricorsivo:

# 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

-cfallisce su OS X 10.5: option -c not recognized. Ne usiamo uno per i test su PowerPC di Apple. Sembra che la versione di livello inferiore di supporti OS X -l, -p, -we -d.
JWW

@jww Spiego perché si ottiene l'errore nella mia risposta di seguito. stackoverflow.com/a/58616002/1896134
JayRizzo

4

Risposta (singoli file)


1. Mostra i tasti da utilizzare nella selezione.

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. Scegliere una chiave da eliminare.

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. Mostra di nuovo le chiavi per vedere che sono state rimosse.

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

4. Infine, RIMUOVI TUTTE le chiavi per un determinato file

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

Risposta (tutti i file in una directory)


1. Mostra i tasti da utilizzare nella selezione.

xattr -r ~/Desktop

2. Rimuovere una chiave specifica per OGNI FILE in una directory

xattr -rd com.apple.FinderInfo ~/Desktop

3. Rimuovere TUTTE le chiavi su OGNI FILE in una directory

xattr -rc ~/Desktop

AVVERTENZA: una volta eliminati, NON li riavrai!
ERRORE GUASTO: NON ESISTE UNDO.


Errori


Volevo affrontare l'errore che stanno ricevendo le persone. Perché anche gli errori mi hanno fatto impazzire ... Su un Mac se installi xattrin Python, il tuo ambiente potrebbe avere un problema.

Ci sono due diversi percorsi sul mio mac per xattr

type -a xattr

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

Quindi in uno degli esempi in cui -cnon funzionerà in xargs è perché in bash si è predefiniti alla versione non python.

Lavora con -c

/usr/bin/xattr -c

NON funziona con -c

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

Il mio Shell / Terminale di default è / usr / local / bin / xattr perché mio $PATH /usr/local/bin:è prima del /usr/bin:quale credo sia l'impostazione predefinita.

Posso dimostrarlo perché, se provi a disinstallare Python xattrvedrai:

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)?

soluzioni alternative


Per correggere option -c not recognizederrori.

  1. Disinstalla qualsiasi Python xattrche potresti avere:pip3 uninstall xattr
  2. Chiudi tutte le Terminalfinestre ed esciTerminal
  3. Riapri una nuova Terminalfinestra.
  4. Riesegui il xattrcomando e ora dovrebbe funzionare.

O

Se vuoi mantenere Python, xattrusa

/usr/bin/xattr

per qualsiasi Shellcomando inTerminal


Esempio:


La versione di Python di xattrnon gestisce affatto le immagini:

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

Man Pages

PAGINA DELL'UOMO per OSX xattr

PAGINA DELL'UOMO per Python xattr VERSIONE 0.6.4

NOTA: non sono riuscito a trovare la pagina di aiuto di Python per l'attuale VERSIONE 0.9.6

Grazie per aver letto!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.