Bagaimana Mac OS X dapat menyimpan detail tentang URL tempat file diunduh?

8

WRT topik ini Apa yang harus saya lakukan tentang com.apple.quarantine? , Saya ingin tahu bagaimana OS X belajar dan menyimpan informasi tersebut di bidang @. Saya tidak mencari cara untuk menonaktifkan fitur ini, tetapi untuk kode (atau kodesemu, ide, apa pun) mengenai implementasi hal ini. Terima kasih sebelumnya.

Raffaele Di Fazio
sumber

Jawaban:

6

Seperti yang disebutkan Daniel, browser dapat menyimpan URL sumber (dan juga pengarah) dari file yang diunduh dalam atribut yang diperluas com.apple.metadata:kMDItemWhereFroms.

Pertama Apple menambahkan ini ke Safari untuk Mac OS X 10.4, kemudian ditambahkan ke Chrome / Chromium [Masalah 22289] , dan ada permintaan peningkatan yang luar biasa untuk menambahkannya ke Firefox [Bug 337051] .

Adapun kode aktual untuk mengimplementasikan ini, lihat patch Chromium .

mark4o
sumber
Sejarah yang bagus :-) Namun, ketika menggunakan Safari saya tidak melihat pengarah (atau setidaknya tidak di unduhan baru saya mencoba melihat apakah saya melewatkan sesuatu). Mungkin ada yang berbeda ketika mengklik kanan dan mengunduh, atau ketika unduhan dimulai secara otomatis? (Misalnya, beberapa peramban tidak mengirim pengarah saat membuka tautan di jendela baru juga.)
Arjan
Ah, Anda benar, mdlsmemang menunjukkannya untuk unduhan yang dimulai secara otomatis. Dan Finder's Get Info menunjukkan itu sebagai daftar yang dipisahkan koma, yang gagal saya perhatikan!
Arjan
6

Setelah mengunduh file apa pun, menjalankan xattr fileakan menunjukkan kepada Anda apa yang telah disimpan oleh browser dalam atribut yang diperluas:

xattr mydownload.gz
com.apple.metadata: kMDItemWhereFroms
com.apple.quarantine

Selanjutnya, detail lebih lanjut:

xattr -p com.apple.quarantine mydownload.gz 
0000; 4cee9d4b; Safari; 24064D6B-9854-46BC-AF73-5DE5F8042D0B | com.apple.Safari

xattr -p com.apple.metadata: kMDItemWhereFroms mydownload.gz 
62 70 6C 69 73 74 30 30 A1 01 5F 10 24 68 74 74
70 3A 2F 2F 73 75 [dan seterusnya]

... atau, dalam format yang dapat dibaca:

mdls -name kMDItemWhereFroms mydownload.gz
kMDItemWhereFroms = (
    "http: // some-url"
)

Anda dapat mengatur sendiri (atau atribut apa pun yang Anda inginkan) juga:

xattr -w-nama beberapa nilai-mydownload.gz

The berikut bekerja juga, meskipun adalah memiliki hasil yang berbeda ketika menjalankan perintah di atas lagi:

xattr -w com.apple.metadata: kMDItemWhereFroms http://example.com mydownload.gz

Dan untuk com.apple.quarantineatributnya, menurut memahami :

Biasanya, data Karantina terdiri dari sekumpulan 4 nilai titik koma (satu digit angka desimal untuk tujuan yang tidak diketahui - biasanya 0000, ID buram 8 karakter , nama aplikasi yang membuat file karantina, dan UTI aplikasi) (Uniform Type Identifier) ​​diawali dengan simbol pipa)

Misalnya, untuk dua file berbeda yang diunduh menggunakan Mozilla FireFox, ini terlihat seperti:

com.apple.quarantine: 0000;4b392bb2;Firefox;|org.mozilla.firefox
com.apple.quarantine: 0000;4b38d820;Firefox;|org.mozilla.firefox

Menggunakan Tindakan Folder Automator Anda dapat menjalankan perintah tersebut untuk file baru di folder tertentu, jika itu yang Anda inginkan.

Arjan
sumber
4

Informasi itu disimpan dalam apa yang disebut "atribut diperluas". John Siracusa memiliki artikel bagus yang membahas atribut yang diperluas ketika pertama kali diperkenalkan, di OS X 10.4: http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/7 .

Tampaknya tidak ada lagi halaman manual untuk alat baris perintah 'xattr', tetapi 'xattr -h' harus menunjukkan bantuan dasar.

API tingkat POSIX / BSD tersedia di /usr/include/sys/xattr.h yang mendefinisikan fungsi C seperti getxattr (), setxattr (), removexattr (), removexattr (), listxattr (), dan sepupu berbasis FILE mereka. (Perintah ini, tidak seperti 'xattr (1)', memiliki halaman manual).

NSGod
sumber
3

Itu diatur oleh aplikasi mengunduh file. Tidak ada deteksi unduhan ajaib, hanya atribut yang ditetapkan pada file yang diunduh oleh aplikasi unduhan.

Saya baru saja mengunduh file zip menggunakan wget, Google Chrome, Firefox dan Safari, dan, seperti yang diharapkan, wgetunduhan tidak memiliki atribut tambahan, unduhan browser miliki, karena mereka mengetahui fitur itu. Menariknya, unduhan Firefox mengatur karantina, tetapi lupa untuk mengatur com.apple.metadata:kMDItemWhereFroms, informasi tempat file yang diunduh awalnya (URL-nya). Safari dan Chrome tidak mengatur keduanya wget.

Daniel Beck
sumber