web-dev-qa-db-fra.com

Comment supprimer les "attributs étendus" d'un fichier sous Mac OS X?

J'ai un script AppleScript qui exécute un test de stress. Une partie du test consiste à ouvrir, enregistrer et fermer certains fichiers. D'une manière ou d'une autre, les fichiers ont récupéré certains "attributs étendus" qui empêchent la sauvegarde des fichiers. Cela provoque l'échec du test de résistance.

Comment puis-je supprimer les attributs étendus?

241
tames

Utilisez la commande xattr. Vous pouvez inspecter les attributs étendus:

$ xattr s.7z
com.Apple.metadata:kMDItemWhereFroms
com.Apple.quarantine

et utilisez l'option -d pour supprimer un attribut étendu:

$ xattr -d com.Apple.quarantine s.7z
$ xattr s.7z
com.Apple.metadata:kMDItemWhereFroms

vous pouvez également utiliser l'option -c pour supprimer tous les attributs étendus:

$ xattr -c s.7z
$ xattr s.7z

xattr -h vous montrera les options en ligne de commande et xattr a une page de manuel .

365
user557219

Supprimer un attribut unique sur un fichier unique

Voir la réponse de Bavarious.


Pour supprimer tous les attributs étendus d'un fichier unique

Utilisez xattr avec le drapeau -c pour "effacer" les attributs:

xattr -c yourfile.txt



Pour supprimer tous les attributs étendus de plusieurs fichiers

Pour supprimer de manière récursive les attributs étendus de tous les fichiers d'un répertoire, combinez l'indicateur -c "clear" avec l'indicateur -r récursif:

xattr -rc /path/to/directory



Un conseil pour les utilisateurs de Mac OS X

Vous avez un long chemin avec des espaces ou des caractères spéciaux?

Ouvrez Terminal.app et commencez à taper xattr -rc, incluez un espace de fin, puis faites glisser le fichier ou le dossier dans la fenêtre Terminal.app. Le chemin complet sera automatiquement ajouté avec le caractère d'échappement approprié.

97
cwd

Essayez d'utiliser:

xattr -rd com.Apple.quarantine directoryname

Cela permet de supprimer récursivement l'attribut embêtant partout.

22
venkat

Une autre approche récursive:

# 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
7
bob