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

13

Распространение по нескольким файловым системам У меня есть множество файлов .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-click, но это утомительно.

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

Грэм Перрин
источник

Ответы:

21
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

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

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

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

вставьте это

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» выбран для «в»

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

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

Великий Волшебник Зиппи
источник