Comment supprimer xattr com.apple.quarantine de tous les fichiers .webarchive avec cet attribut étendu?

13

Répartis sur plusieurs systèmes de fichiers, j'ai de nombreux fichiers .webarchive qui ont été enregistrés par OmniWeb. Ainsi, par exemple:

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;

Ces fichiers sont traités comme provenant d'un développeur non identifié. Je peux ouvrir chacun avec un contrôle-clic mais c'est fastidieux.

J'aimerais donc une commande, impliquant probablement find (1) , pour supprimer tous ces attributs étendus .

Graham Perrin
la source

Réponses:

21
find . -iname '*.webarchive' -print0 | xargs -0 xattr -d com.apple.quarantine
  • supprimera ( xattr -d ) l' attribut étendu com.apple.quarantine
  • à partir de tous les fichiers avec une extension .webarchive ( -iname '* .webarchive' )
  • situé dans le répertoire courant et ses sous-répertoires ( . -depth , où -depth est implicite)
  • passer par xargs ( -print0 | xargs -0 ) pour éviter les problèmes avec les noms de fichiers contenant des espaces et d'autres caractères spéciaux (un objectif similaire peut être atteint avec une efficacité légèrement réduite en utilisant find . -iname '*.webarchive' -exec xattr -d '{}' \;).

Explication de la différence d'efficacité:

Chaque fois que la syntaxe le permet, comme dans ce cas, xargs assemble une ou plusieurs lignes de commande telles que xattr -d com.apple.quarantine /path/to/file1.webarchive /path/to/fileN.webarchive

tandis que la version à mon avis la plus facile à retenir - findseule la répétition de la commande à chaque fois:xattr -d com.apple.quarantine /path/to/file1.webarchive ; xattr -d com.apple.quarantine /path/to/fileN.webarchive

Ryccardo
la source
1
findfera le même assemblage de chemin de fichier efficace si vous le terminez par \+au lieu de \;.
Slipp D. Thompson
0

voici une façon plus automatisée d'accomplir cela:

ouvrir l'automate - sélectionner "service"

collez ceci

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

Assurez-vous que «fichiers ou dossiers» est sélectionné pour «Le service reçoit sélectionné». Assurez-vous que "Finder" est sélectionné pour "dans"

puis appuyez sur enregistrer et nommez-le non-quarantaine, accédez au dossier ou au fichier que vous souhaitez supprimer de la quarantaine et faites un clic droit et sélectionnez non-quarantaine

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

Grand Wizard Zippy
la source