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

  1. Удалите любой Python xattr ты можешь иметь: pip3 uninstall xattr
  2. Закрыть все Terminal окна и выйти Terminal
  3. Снова открыть новый Terminal окно.
  4. Повторить 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 для OSX xattr

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
Другие вопросы по тегам