Wie entferne ich die "erweiterten Attribute" einer Datei in Mac OS X?

260

Ich habe ein AppleScript- Skript, das einen Stresstest ausführt. Ein Teil des Tests besteht darin, bestimmte Dateien zu öffnen, zu speichern und zu schließen. Irgendwie haben die Dateien einige "erweiterte Attribute" aufgenommen, die das Speichern der Dateien verhindern. Dadurch schlägt der Stresstest fehl.

Wie entferne ich die erweiterten Attribute?

zähmt
quelle
Erweiterte Attribute können das Speichern einer Datei nicht verhindern. Sind Sie sicher, dass es sich nicht um ein Berechtigungsproblem oder eine ACL handelt?
Lily Ballard
Haben Sie gerade ein Upgrade auf 10.7.3 durchgeführt? Es scheint einen Fehler zu geben, bei dem viele GUI-Apps (einschließlich TextEdit, aber auch andere Apps - einschließlich einer, die ich selbst geschrieben habe und die nichts Seltsames bewirken) jetzt das Quarantäne-Bit für Dateien setzen. Wie @Bavarious sagte, können Sie es mit @ xattr @ entfernen. Schauen Sie sich TextWrangler an, der kostenlos ist und meiner Meinung nach eine gute AppleScript-Unterstützung bietet. Mir wurde gesagt, dass es das Quarantäne-Bit nicht setzt.
Abhi Beckert
6
Wenn das Folgende funktioniert hat, sollten Sie die Antwort akzeptieren - es hilft, diese Website zu einer guten Wissensbasis zu machen :-)
Graza

Antworten:

392

Verwenden Sie den xattrBefehl. Sie können die erweiterten Attribute überprüfen:

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

und verwenden Sie die -dOption, um ein erweitertes Attribut zu löschen:

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

Sie können auch die -cOption verwenden, um alle erweiterten Attribute zu entfernen:

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

xattr -hzeigt Ihnen die Befehlszeilenoptionen und xattr verfügt über eine Manpage .

Joël
quelle
2
Apple hat eine Manpage dafür online verfügbar: developer.apple.com/documentation/Darwin/Reference/ManPages/…
Quinn Taylor
Es scheint, dass die Option -c in Mountain Lion (10.8) entfernt wurde. xattr -h listet -c nicht mehr auf und erzeugt bei Verwendung "-c nicht erkannt". Es ist jetzt sehr schmerzhaft, erweiterte Attribute einzeln zu entfernen.
Helioz
1
-cfunktioniert bei mir nicht (OS X 10.6.8). -dhatte auch keine Wirkung, obwohl es sich nicht beschwerte. Ich musste jedes erweiterte Attribut explizit so benennen: xattr -rd <attrname> <folder/file>(löscht rekursiv). Um die vorhandenen Attribute herauszufinden (wahrscheinlich dieselben Attribute im gesamten Verzeichnisbaum), verwenden Sie xattr <dir/file>wie in der obigen Antwort.
Mindthief
@mindtheif niemand hier erwähnt, dass dies die xCode-Befehlszeilentools erfordert. Am 10.6.8 heißt es etwas anderes. Hier ist ein Link zu einem vorgefertigten Installationsprogramm auf GitHub, sodass Sie nicht den gesamten xCode installieren müssen, um festzustellen, ob dies Ihr Problem ist.
5
Wenn Xcode auf meinem 10.8.5-System installiert ist, xattr -cfunktioniert es für mich einwandfrei (und alle Metadaten wurden erfolgreich entfernt).
Doktor J
103

Entfernen eines einzelnen Attributs in einer einzelnen Datei

Siehe die Antwort von Bavarious.


So entfernen Sie alle erweiterten Attribute in einer einzelnen Datei

Verwenden Sie xattrmit dem -cFlag, um die Attribute zu "löschen":

xattr -c yourfile.txt



So entfernen Sie alle erweiterten Attribute für viele Dateien

Um erweiterte Attribute für alle Dateien in einem Verzeichnis rekursiv zu entfernen, kombinieren Sie das -cFlag "Löschen" mit dem -rFlag " Rekursiv":

xattr -rc /path/to/directory



Ein Tipp für Mac OS X-Benutzer

Haben Sie einen langen Weg mit Leerzeichen oder Sonderzeichen?

Öffnen Sie Terminal.appdie Eingabe und beginnen Sie mit der Eingabe xattr -rc, Terminal.appfügen Sie ein nachfolgendes Leerzeichen ein und ziehen Sie dann die Datei oder den Ordner in das Fenster. Der vollständige Pfad wird automatisch mit dem richtigen Escapezeichen hinzugefügt.

cwd
quelle
1
-cschlägt unter OS X 10.5 fehl : option -c not recognized. Wir verwenden eine zum Testen auf Apples PowerPC. Es sieht aus wie die niedrigere Version von OS X unterstützt -l, -p, -wund -d.
JWW
@cwd: Das Ziehen und Ablegen des Finders in das Terminal funktioniert nicht mit einigen "speziellen" Finder-Dateien, wie . textClippingin apple.stackexchange.com/questions/301871/… beschrieben
ccpizza
@jww Ich erkläre, warum Sie den Fehler in meiner Antwort unten erhalten. stackoverflow.com/a/58616002/1896134
JayRizzo
23

Versuchen Sie es mit:

xattr -rd com.apple.quarantine directoryname

Dadurch wird das lästige Attribut überall rekursiv entfernt.

venkat
quelle
7

Ein weiterer rekursiver Ansatz:

# 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
Bob
quelle
-cschlägt unter OS X 10.5 fehl : option -c not recognized. Wir verwenden eine zum Testen auf Apples PowerPC. Es sieht aus wie die niedrigere Version von OS X unterstützt -l, -p, -wund -d.
JWW
@jww Ich erkläre, warum Sie den Fehler in meiner Antwort unten erhalten. stackoverflow.com/a/58616002/1896134
JayRizzo
3

Antwort (Einzeldateien)


1. Präsentieren Sie die Schlüssel, die bei der Auswahl verwendet werden sollen.

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. Wählen Sie einen zu löschenden Schlüssel.

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. Zeigen Sie die Schlüssel erneut an, um festzustellen, ob sie entfernt wurden.

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

4. ENTFERNEN Sie abschließend ALLE Schlüssel für eine bestimmte Datei

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

Antwort (Alle Dateien in einem Verzeichnis)


1. Präsentieren Sie die Schlüssel, die bei der Auswahl verwendet werden sollen.

xattr -r ~/Desktop

2. Entfernen Sie einen bestimmten Schlüssel für JEDE DATEI in einem Verzeichnis

xattr -rd com.apple.FinderInfo ~/Desktop

3. Entfernen Sie ALLE Schlüssel in JEDER DATEI in einem Verzeichnis

xattr -rc ~/Desktop

WARNUNG: Sobald Sie diese gelöscht haben, erhalten Sie sie NICHT mehr zurück!
FEHLERFEHLER: Es gibt kein Rückgängigmachen.


Fehler


Ich wollte die Fehler ansprechen, die die Leute bekommen. Weil die Fehler mich auch verrückt gemacht haben ... Auf einem Mac, wenn Sie xattrin Python installieren , kann Ihre Umgebung ein Problem haben.

Auf meinem Mac gibt es zwei verschiedene Pfade für xattr

type -a xattr

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

In einem der Beispiele, in denen -cin xargs nicht funktioniert, wird in bash standardmäßig die Nicht-Python-Version verwendet.

Arbeitet mit -c

/usr/bin/xattr -c

Funktioniert NICHT mit -c

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

Mein Shell / Terminal standardmäßig / usr / local / bin / xattr weil meine $PATH /usr/local/bin:ist vor /usr/bin:dem ich glaube , ist die Standardeinstellung.

Ich kann dies beweisen, denn wenn Sie versuchen, die Python zu deinstallieren, werden xattrSie sehen:

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

Problemumgehungen


option -c not recognizedFehler beheben .

  1. Deinstallieren xattrSie möglicherweise Python :pip3 uninstall xattr
  2. Alle TerminalFenster schließen und beendenTerminal
  3. Öffnen Sie erneut ein neues TerminalFenster.
  4. ReRun xattrBefehl und es sollte jetzt funktionieren.

ODER

Wenn Sie den Python behalten möchten, xattrverwenden Sie

/usr/bin/xattr

für alle ShellBefehle inTerminal


Beispiel:


Pythons Version von verarbeitet xattrüberhaupt keine Bilder:

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

MAN PAGE für OSX xattr

MAN PAGE für Python xattr VERSION 0.6.4

HINWEIS: Ich konnte die Python-Hilfeseite für die aktuelle Version 0.9.6 nicht finden

Danke fürs Lesen!

JayRizzo
quelle