Jak usunąć „atrybuty rozszerzone” z pliku w Mac OS X?

260

Mam skrypt AppleScript, który uruchamia test warunków skrajnych. Częścią testu jest otwieranie, zapisywanie i zamykanie niektórych plików. W jakiś sposób pliki wykryły „rozszerzone atrybuty”, które uniemożliwiają zapisanie plików. To powoduje, że test warunków skrajnych kończy się niepowodzeniem.

Jak usunąć rozszerzone atrybuty?

oswoić
źródło
Rozszerzone atrybuty nie mogą uniemożliwić zapisania pliku. Czy na pewno nie jest to problem z uprawnieniami ani listą ACL?
Lily Ballard
Czy właśnie uaktualniłeś do 10.7.3? Wygląda na to, że istnieje błąd, w którym wiele aplikacji GUI (w tym TextEdit, ale także inne aplikacje - w tym jedna, którą sam napisałem, która nie robi nic dziwnego) ustawia bit kwarantanny na plikach. Jak powiedział @Bavarious, możesz go usunąć za pomocą @ xattr @. Zajrzyj do TextWrangler, który jest bezpłatny i myślę, że ma dobrą obsługę AppleScript. Powiedziano mi, że nie ustawia bitów kwarantanny.
Abhi Beckert,
6
Jeśli poniższe działania zadziałały, powinieneś zaakceptować odpowiedź - pomaga uczynić tę stronę dobrą bazą wiedzy :-)
Graza

Odpowiedzi:

392

Użyj xattrpolecenia. Możesz sprawdzić rozszerzone atrybuty:

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

i użyj -dopcji, aby usunąć jeden rozszerzony atrybut:

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

możesz również użyć -copcji, aby usunąć wszystkie rozszerzone atrybuty:

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

xattr -hpokaże ci opcje wiersza poleceń, a xattr ma stronę podręcznika man .

Joël
źródło
2
Apple ma stronę podręcznika użytkownika dostępną online: developer.apple.com/documentation/Darwin/Reference/ManPages/...
Quinn Taylor,
Wygląda na to, że opcja -c została usunięta w Mountain Lion (10.8). xattr -h nie wyświetla już listy -c i wyświetla „-c nierozpoznany”, gdy jest używany. Teraz bardzo bolesne jest usuwanie rozszerzonych atrybutów jeden po drugim.
helioz
1
-cnie działa dla mnie (OS X 10.6.8). -dteż nie miało żadnego efektu, chociaż nie narzekało. Musiałem wyraźnie nazwać każdy rozszerzony atrybut tak: xattr -rd <attrname> <folder/file>(usuwa rekurencyjnie). Aby dowiedzieć się, jakie są obecne atrybuty (prawdopodobnie te same atrybuty w całym drzewie katalogów), skorzystaj xattr <dir/file>z powyższej odpowiedzi.
złodziej
@mindtheif nikt nie wspomniał tutaj, że wymaga to narzędzi wiersza polecenia xCode. W wersji 10.6.8 nazywa się to czymś innym. Oto link do gotowego instalatora w GitHub, więc nie musisz instalować całego xCode, aby sprawdzić, czy to twój problem.
5
Z Xcode zainstalowanym w moim systemie 10.8.5, xattr -cdziała dobrze dla mnie (i pomyślnie usunął wszystkie metadane).
Doktor J
103

Usuwanie pojedynczego atrybutu z pojedynczego pliku

Zobacz odpowiedź Bavariousa.


Aby usunąć wszystkie atrybuty rozszerzone z jednego pliku

Użyj xattrz -cflagą, aby „wyczyścić” atrybuty:

xattr -c yourfile.txt



Aby usunąć wszystkie atrybuty rozszerzone z wielu plików

Aby rekurencyjnie usunąć rozszerzone atrybuty dla wszystkich plików w katalogu, połącz -cflagę „wyczyść” z -rflagą rekurencyjną:

xattr -rc /path/to/directory



Wskazówka dla użytkowników Mac OS X.

Masz długą ścieżkę ze spacjami lub znakami specjalnymi?

Otwórz Terminal.appi zacznij pisać xattr -rc, dołącz końcową spację, a następnie przeciągnij plik lub folder do Terminal.appokna, a automatycznie doda pełną ścieżkę z odpowiednim odstępem.

cwd
źródło
1
-cnie działa na OS X 10.5: option -c not recognized. Używamy jednego do testowania na PowerPC firmy Apple. To wygląda wersji niższego poziomu OS X obsługuje -l, -p, -wi -d.
jww
@cwd: przeciągnij i upuść Findera do terminala nie działa z niektórymi „specjalnymi” plikami Findera, takimi . textClippingjak opisano w apple.stackexchange.com/questions/301871/…
ccpizza
@jww Poniżej wyjaśniam, dlaczego pojawia się błąd w mojej odpowiedzi. stackoverflow.com/a/58616002/1896134
JayRizzo
23

Spróbuj użyć:

xattr -rd com.apple.quarantine directoryname

Zajmuje się to rekurencyjnym usuwaniem nieznośnego atrybutu wszędzie.

venkat
źródło
7

Inne rekurencyjne podejście:

# 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
pion
źródło
-cnie działa na OS X 10.5: option -c not recognized. Używamy jednego do testowania na PowerPC firmy Apple. To wygląda wersji niższego poziomu OS X obsługuje -l, -p, -wi -d.
jww
@jww Poniżej wyjaśniam, dlaczego pojawia się błąd w mojej odpowiedzi. stackoverflow.com/a/58616002/1896134
JayRizzo
3

Odpowiedź (pojedyncze pliki)


1. Zaprezentuj klawisze do wyboru.

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. Wybierz klucz do usunięcia.

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. Ponownie pokaż klucze, aby zobaczyć, że zostały usunięte.

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

4. Na koniec USUŃ WSZYSTKIE klucze dla określonego pliku

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

Odpowiedź (wszystkie pliki w katalogu)


1. Zaprezentuj klawisze do wyboru.

xattr -r ~/Desktop

2. Usuń określony klucz do KAŻDEGO PLIKU z katalogu

xattr -rd com.apple.FinderInfo ~/Desktop

3. Usuń WSZYSTKIE klucze z KAŻDEGO PLIKU w katalogu

xattr -rc ~/Desktop

OSTRZEŻENIE: Po ich usunięciu NIE ODZYSKASZ ich!
BŁĄD BŁĘDU: NIE MA Cofania.


Błędy


Chciałem poradzić sobie z błędami, które dostają ludzie. Ponieważ błędy doprowadziły mnie również do szału ... Na Macu, jeśli instalujesz xattrw Pythonie, może to oznaczać problem w twoim środowisku.

Na moim komputerze Mac istnieją dwie różne ścieżki xattr

type -a xattr

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

Tak więc w jednym z przykładów, gdzie -cnie będzie działać w xargs, jest to, że w bash domyślnie korzystasz z wersji innej niż python.

Pracuje z -c

/usr/bin/xattr -c

NIE działa z -c

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

Domyślnie moja powłoka / terminal to / usr / local / bin / xattr, ponieważ mój $PATH /usr/local/bin:jest przed, /usr/bin:który moim zdaniem jest domyślny.

Mogę to udowodnić, ponieważ jeśli spróbujesz odinstalować python xattr, zobaczysz:

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

Obejścia


Aby naprawić option -c not recognizedbłędy.

  1. Odinstaluj dowolny Python, xattrktóry możesz mieć:pip3 uninstall xattr
  2. Zamknij wszystkie Terminalokna i wyjdźTerminal
  3. Otwórz ponownie nowe Terminalokno.
  4. Ponownie uruchom xattrkomendę i powinna już działać.

LUB

Jeśli chcesz zachować Python, xattrużyj

/usr/bin/xattr

dla jakichkolwiek Shellpoleceń wTerminal


Przykład:


Wersja Pythona w xattrogóle nie obsługuje obrazów:

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

Strony man

STRONA PODRĘCZNIKA dla OSX xattr

STRONA PODRĘCZNIKA dla WERSJI Python xattr 0.6.4

UWAGA: Nie mogłem znaleźć strony pomocy dla Pythona dla bieżącej wersji 0.9.6

Dziękuje za przeczytanie!

JayRizzo
źródło