Как удалить "расширенные атрибуты" в файле в Mac OS X?

У меня есть AppleScript script, который проводит стресс-тест. Часть теста - открывать, сохранять и закрывать определенные файлы. Так или иначе, файлы получили некоторые "расширенные атрибуты", которые запрещают сохранение файлов. Это приводит к сбою стресс-теста.

Как удалить расширенные атрибуты?

Ответ 1

Используйте команду xattr. Вы можете проверить расширенные атрибуты:

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

и используйте параметр -d для удаления одного расширенного атрибута:

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

вы также можете использовать параметр -c для удаления всех расширенных атрибутов:

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

xattr -h покажет вам параметры командной строки, а xattr имеет справочную страницу.

Ответ 2

Удаление одного атрибута в одном файле

См. Баварский ответ.


Чтобы удалить все расширенные атрибуты в одном файле

Используйте xattr с флагом -c, чтобы "очистить" атрибуты:

xattr -c yourfile.txt



Удаление всех расширенных атрибутов во многих файлах

Чтобы рекурсивно удалить расширенные атрибуты для всех файлов в каталоге, объедините флаг -c "clear" с рекурсивным флагом -r:

xattr -rc /path/to/directory



Совет для пользователей Mac OS X

Есть длинный путь с пробелами или специальными символами?

Откройте Terminal.app и начните вводить текст xattr -rc, добавьте конечное пространство, а затем перетащите файл или папку в окно Terminal.app, и он автоматически добавит полный путь с соответствующим экранированием.

Ответ 3

Попробуйте использовать:

xattr -rd com.apple.quarantine directoryname

Это требует рекурсивного удаления атрибута pesky.

Ответ 4

Другой рекурсивный подход:

# 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