Как удалить "расширенные атрибуты" для файла в Mac OS X?
У меня есть скрипт AppleScript, который запускает стресс-тест. Частью теста является открытие, сохранение и закрытие определенных файлов. Каким-то образом файлы подобрали некоторые "расширенные атрибуты", которые запрещают сохранение файлов. Это приводит к провалу стресс-теста.
Как удалить расширенные атрибуты?
4 ответа
Использовать 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 есть страница руководства.
Удаление одного атрибута в одном файле
Смотрите ответ Бавариуса.
Чтобы удалить все расширенные атрибуты в одном файле
использование xattr
с -c
флаг, чтобы "очистить" атрибуты:
xattr -c yourfile.txt
Удалить все расширенные атрибуты во многих файлах
Чтобы рекурсивно удалить расширенные атрибуты для всех файлов в каталоге, объедините -c
"очистить" флаг с -r
рекурсивный флаг:
xattr -rc /path/to/directory
Совет для пользователей Mac OS X
Есть длинный путь с пробелами или специальными символами?
открыто Terminal.app
и начать печатать xattr -rc
, включите завершающий пробел, а затем перетащите файл или папку в Terminal.app
окно, и он автоматически добавит полный путь с правильным экранированием.
Попробуйте использовать:
xattr -rd com.apple.quarantine directoryname
Это заботится о рекурсивном удалении противного атрибута везде.
Ответ (отдельные файлы)
1. Продемонстрируйте ключи для использования при выборе.
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. Выберите ключ для удаления.
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. Покажите ключи еще раз, чтобы увидеть, что они были удалены.
xattr -l ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
# com.apple.FinderInfo
# com.apple.metadata:kMDItemScreenCaptureGlobalRect
# com.apple.metadata:kMDItemScreenCaptureType
4. Наконец, УДАЛИТЕ ВСЕ ключи для определенного файла.
xattr -c ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
Ответ (все файлы в каталоге)
1. Продемонстрируйте ключи для использования при выборе.
xattr -r ~/Desktop
2. Удалить определенный ключ для КАЖДОГО ФАЙЛА в каталоге.
xattr -rd com.apple.FinderInfo ~/Desktop
3. Удалите ВСЕ ключи для КАЖДОГО ФАЙЛА в каталоге.
xattr -rc ~/Desktop
ВНИМАНИЕ: как только вы удалите их, вы НЕ получите их обратно!
ОШИБКА ОШИБКА: НЕТ ОТМЕНА.
Ошибки
Я хотел разобраться с ошибкой, которую получают люди.Потому что ошибки тоже свели меня с ума... На макинтоше при установкеxattr
в python, тогда в вашей среде может возникнуть проблема.
На моем Mac есть два разных пути для
xattr
type -a xattr
# xattr is /usr/local/bin/xattr # PYTHON Installed Version
# xattr is /usr/bin/xattr # Mac OSX Installed Version
Итак, в одном из примеров, где -c
не будет работать в xargs, потому что в bash вы по умолчанию используете версию, отличную от python.
Работает с -c
/usr/bin/xattr -c
НЕ работает с -c
/usr/local/bin/xattr -c
# option -c not recognized
Моя оболочка / терминал по умолчанию - /usr/local/bin/xattr, потому что мой $PATH
/usr/local/bin:
раньше /usr/bin:
который, я считаю, используется по умолчанию.
Я могу доказать это, потому что, если вы попытаетесь удалить python xattr
ты увидишь:
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)?
Обходные пути
Исправить option -c not recognized
Ошибки.
- Удалите любой Python
xattr
ты можешь иметь:pip3 uninstall xattr
- Закрыть все
Terminal
окна и выйтиTerminal
- Снова открыть новый
Terminal
окно. - Повторить
xattr
команда, и теперь она должна работать.
ИЛИ
Если вы хотите сохранить Python
xattr
затем используйте
/usr/bin/xattr
для любой Shell
команды в Terminal
Пример:
Версия Python xattr
вообще не обрабатывает изображения:
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
Страницы руководства
MAN PAGE для Python xattr ВЕРСИЯ 0.6.4
ПРИМЕЧАНИЕ: мне не удалось найти страницу справки python для текущей ВЕРСИИ 0.9.6.
Спасибо за прочтение!
Еще один рекурсивный подход:
# 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