Bagaimana cara menghapus "atribut diperluas" pada file di Mac OS X?

260

Saya memiliki skrip AppleScript yang menjalankan tes stres. Bagian dari tes ini adalah untuk membuka, menyimpan, dan menutup file-file tertentu. Entah bagaimana, file telah mengambil beberapa "atribut diperluas" yang melarang file disimpan. Itu menyebabkan tes stres gagal.

Bagaimana cara menghapus atribut yang diperluas?

jinak
sumber
Atribut yang diperluas tidak dapat mencegah file disimpan. Apakah Anda yakin itu bukan masalah izin, atau ACL?
Lily Ballard
Apakah Anda baru saja meningkatkan ke 10.7.3? Tampaknya ada bug di mana banyak aplikasi GUI (termasuk TextEdit, tetapi juga aplikasi lain - termasuk yang saya tulis sendiri yang tidak melakukan hal aneh) sekarang akan mengatur bit karantina pada file. Seperti yang dikatakan @Bavarious, Anda dapat menghapusnya menggunakan @ xattr @. Lihat ke TextWrangler, yang gratis, dan saya pikir memiliki dukungan AppleScript yang baik. Saya diberitahu itu tidak mengatur bit karantina.
Abhi Beckert
6
Jika hal di bawah ini berhasil, Anda harus menerima jawabannya - membantu menjadikan situs web ini sebagai basis pengetahuan yang baik :-)
Graza

Jawaban:

392

Gunakan xattrperintah. Anda dapat memeriksa atribut yang diperluas:

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

dan gunakan -dopsi untuk menghapus satu atribut yang diperluas:

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

Anda juga dapat menggunakan -copsi untuk menghapus semua atribut yang diperluas:

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

xattr -hakan menampilkan opsi baris perintah, dan xattr memiliki halaman manual .

Joël
sumber
2
Apple memiliki halaman manual untuk itu tersedia secara online: developer.apple.com/documentation/Darwin/Reference/ManPages/…
Quinn Taylor
Tampaknya opsi -c telah dihapus di Mountain Lion (10.8). xattr -h tidak lagi mencantumkan -c dan menghasilkan "-c tidak dikenali" saat digunakan. Sangat menyakitkan sekarang untuk menghapus atribut yang diperluas satu per satu.
helioz
1
-ctidak bekerja untuk saya (OS X 10.6.8). -djuga tidak memiliki efek apa pun meskipun tidak mengeluh. Saya harus secara eksplisit memberi nama setiap atribut yang diperluas seperti ini: xattr -rd <attrname> <folder/file>(menghapus secara rekursif). Untuk mengetahui atribut yang ada (kemungkinan atribut yang sama di seluruh pohon direktori) gunakan xattr <dir/file>seperti pada jawaban di atas.
mindthief
@mindthejika tidak ada yang disebutkan di sini bahwa ini memerlukan alat baris perintah xCode. Pada 10.6.8 itu disebut sesuatu yang berbeda. Berikut ini tautan ke penginstal bawaan di GitHub sehingga Anda tidak perlu menginstal semua xCode untuk melihat apakah ini masalah Anda.
5
Dengan Xcode diinstal pada sistem 10.8.5 saya, xattr -cberfungsi dengan baik untuk saya (dan berhasil menghapus semua metadata).
Doktor J
103

Menghapus Atribut Tunggal pada File Tunggal

Lihat jawaban Bavarious.


Untuk menghapus semua atribut yang diperluas pada satu file

Gunakan xattrdengan -cbendera untuk "menghapus" atribut:

xattr -c yourfile.txt



Untuk Menghapus Semua Atribut Diperpanjang Pada Banyak File

Untuk menghapus atribut yang diperluas secara rekursif pada semua file dalam direktori, gabungkan -cflag "clear" dengan -rflag rekursif:

xattr -rc /path/to/directory



Kiat untuk Pengguna Mac OS X

Punya jalur panjang dengan spasi atau karakter khusus?

Buka Terminal.appdan mulai mengetik xattr -rc, sertakan spasi tambahan, lalu seret file atau folder ke Terminal.appjendela dan itu akan secara otomatis menambahkan path lengkap dengan pelolosan yang tepat.

cwd
sumber
1
-cgagal pada OS X 10.5: option -c not recognized. Kami menggunakan satu untuk menguji pada PowerPC Apple. Sepertinya versi downlevel dari OS X mendukung -l, -p, -wdan -d.
jww
@cwd: Finder drag-n-drop ke dalam terminal tidak bekerja dengan beberapa 'khusus' Finder file seperti . textClippingseperti yang dijelaskan dalam apple.stackexchange.com/questions/301871/...
ccpizza
@jww saya jelaskan mengapa Anda mendapatkan kesalahan dalam jawaban saya di bawah ini. stackoverflow.com/a/58616002/1896134
JayRizzo
23

Coba gunakan:

xattr -rd com.apple.quarantine directoryname

Ini menangani menghapus secara rekursif atribut sial di mana-mana.

venkat
sumber
7

Pendekatan rekursif lain:

# 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
sumber
-cgagal pada OS X 10.5: option -c not recognized. Kami menggunakan satu untuk menguji pada PowerPC Apple. Sepertinya versi downlevel dari OS X mendukung -l, -p, -wdan -d.
jww
@jww saya jelaskan mengapa Anda mendapatkan kesalahan dalam jawaban saya di bawah ini. stackoverflow.com/a/58616002/1896134
JayRizzo
3

Jawab (File Individual)


1. Tombol showcase untuk digunakan dalam seleksi.

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. Pilih Kunci untuk dihapus.

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. Perlihatkan tombol lagi untuk melihat mereka telah dihapus.

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

4. Terakhir, HAPUS SEMUA kunci untuk file tertentu

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

Jawab (Semua File Dalam Direktori)


1. Tombol showcase untuk digunakan dalam seleksi.

xattr -r ~/Desktop

2. Hapus Kunci Khusus untuk SETIAP FILE dalam direktori

xattr -rd com.apple.FinderInfo ~/Desktop

3. Hapus SEMUA kunci pada SETIAP FILE dalam direktori

xattr -rc ~/Desktop

PERINGATAN: Setelah Anda menghapus ini, Anda TIDAK mendapatkannya kembali!
KESALAHAN KESALAHAN: TIDAK ADA UNDO.


Kesalahan


Saya ingin mengatasi kesalahan yang didapat orang. Karena kesalahan membuat saya gila juga ... Pada mac jika Anda menginstal xattrdengan python, maka lingkungan Anda mungkin memiliki masalah.

Ada dua jalur berbeda di mac saya untuk xattr

type -a xattr

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

Jadi di salah satu contoh di mana -ctidak akan berfungsi di xargs adalah karena di bash Anda default ke versi non-python.

Bekerja dengan -c

/usr/bin/xattr -c

TIDAK BEKERJA dengan -c

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

Shell / Terminal saya default ke / usr / local / bin / xattr karena saya $PATH /usr/local/bin:adalah sebelum /usr/bin:saya percaya adalah default.

Saya dapat membuktikan ini karena, jika Anda mencoba menghapus python, xattrAnda akan melihat:

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

Penanganan masalah


Untuk Memperbaiki option -c not recognizedKesalahan.

  1. Copot Python apa pun xattryang mungkin Anda miliki:pip3 uninstall xattr
  2. Tutup semua Terminaljendela & keluarTerminal
  3. Buka kembali Terminaljendela baru .
  4. xattrPerintah ReRun dan sekarang harus bekerja.

ATAU

Jika Anda ingin menyimpan Python xattrmaka gunakan

/usr/bin/xattr

untuk setiap Shellperintah diTerminal


Contoh:


Versi Python tentang xattrtidak menangani gambar sama sekali:

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

Halaman Man

HALAMAN MAN untuk OSX xattr

HALAMAN MAN untuk Python xattr VERSION 0.6.4

CATATAN: Saya tidak dapat menemukan halaman bantuan python untuk VERSION 0.9.6 saat ini

Terima kasih sudah membaca!

JayRizzo
sumber