Как удалить "расширенные атрибуты" в файле в 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