Как удалить xattr com.apple.quarantine из всех файлов .webarchive с этим расширенным атрибутом?

Разбросаны по нескольким файловым системам У меня есть множество файлов .webarchive, которые были сохранены OmniWeb. Так, например:

sh-3.2$ ls -@ 2012-03-19.webarchive 
2012-03-19.webarchive
sh-3.2$ ls -@l 2012-03-19.webarchive 
-rw-r--r--@ 1 gjp22  staff  3722852 19 Mar  2012 2012-03-19.webarchive
    com.apple.quarantine         26 
sh-3.2$ xattr -l 2012-03-19.webarchive 
com.apple.quarantine: 0000;4f66fcc8;OmniWeb.app;

Эти файлы считаются от неизвестного разработчика. Я могу открыть каждый с помощью Control-щелчка, но это утомительно.

Итак, я бы хотел, чтобы команда, возможно, с использованием find(1) удаляла все такие расширенные атрибуты .

Ответы (3)

find . -iname '*.webarchive' -print0 | xargs -0 xattr -d com.apple.quarantine
  • удалит ( xattr -d ) расширенный атрибут com.apple.quarantine
  • из всех файлов с расширением .webarchive ( -iname '*.webarchive' )
  • расположенный в текущем каталоге и его подкаталогах ( . -depth , где подразумевается -depth)
  • прохождение через xargs ( -print0 | xargs -0 ), чтобы избежать проблем с именами файлов, содержащими пробелы и другие специальные символы (аналогичная цель может быть достигнута с немного меньшей эффективностью с помощью find . -iname '*.webarchive' -exec xattr -d '{}' \;).

Объяснение разницы эффективности:

Всякий раз, когда это позволяет синтаксис, например, в этом случае, xargs собирает одну или несколько командных строк, таких какxattr -d com.apple.quarantine /path/to/file1.webarchive /path/to/fileN.webarchive

в то время как, на мой взгляд, легче запомнить - только findверсия повторяет команду каждый раз:xattr -d com.apple.quarantine /path/to/file1.webarchive ; xattr -d com.apple.quarantine /path/to/fileN.webarchive

findбудет выполнять такую ​​же эффективную сборку пути к файлу, если вы закончите его \+вместо \;.

вот более автоматизированный способ сделать это:

открыть автоматор - выбрать "сервис"

вставить это

on run {input, parameters}
    tell application "Terminal"
        activate
        set filesString to ""
        repeat with file_ in input
            set filesString to filesString & " " & quoted form of (POSIX path of file_)
        end repeat
        do script "xattr -r -d com.apple.quarantine" & filesString
    end tell
    return input
end run

Убедитесь, что «файлы или папки» выбраны для «Сервис получает выбранные». Убедитесь, что «Finder» выбран для «in»

затем нажмите «Сохранить» и назовите его «не карантин», перейдите к папке или файлу, который вы хотите удалить из карантина, щелкните правой кнопкой мыши и выберите «не карантин».

https://forums.macrumors.com/threads/%E2%80%9Cverifying%E2%80%9D-upon-opening-every-file.2065395/page-2#post-25134721

Версия xattr, которая у меня есть в моей macOS 11.6, утверждает, что имеет ключ -r

-r: действовать рекурсивно

Таким образом, вы должны иметь возможность использовать

xattr -d com.apple.quarantine -r file.webarchive
Гораздо удобнее, это работало на 12.6:xattr -d com.apple.quarantine -r my_dir/
12.5 даже не вышла! Как дела на 12.6? В любом случае, спасибо, я отредактировал свой ответ, включив атрибут.
самый толстый из пальцев, 12,4 - это то, что мои маленькие сосиски хотели напечатать