¿Cómo elimino los "atributos extendidos" en un archivo en Mac OS X?


261

Tengo un script AppleScript que ejecuta una prueba de esfuerzo. Parte de la prueba es abrir, guardar y cerrar ciertos archivos. De alguna manera, los archivos han recogido algunos "atributos extendidos" que impiden que los archivos se guarden. Eso hace que la prueba de esfuerzo falle.

¿Cómo elimino los atributos extendidos?


Los atributos extendidos no pueden evitar que se guarde un archivo. ¿Estás seguro de que no es un problema de permisos o una ACL?
Lily Ballard

¿Acabas de actualizar a 10.7.3? Parece que hay un error en el que muchas aplicaciones GUI (incluidas TextEdit, pero también otras aplicaciones, incluida una que escribí yo mismo que no hace nada extraño) ahora establecerán el bit de cuarentena en los archivos. Como dijo @Bavarious, puede eliminarlo usando @ xattr @. Mira en TextWrangler, que es gratis, y creo que tiene un buen soporte para AppleScript. Me dijeron que no establece el bit de cuarentena.
Abhi Beckert

66
Si lo siguiente funcionó, debe aceptar la respuesta: ayuda a que este sitio web sea una buena base de conocimiento :-)
Graza

Respuestas:


392

Usa el xattrcomando. Puede inspeccionar los atributos extendidos:

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

y use la -dopción para eliminar un atributo extendido:

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

También puede usar la -copción para eliminar todos los atributos extendidos:

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

xattr -hle mostrará las opciones de línea de comando, y xattr tiene una página de manual .


2
Apple tiene una página de manual disponible en línea: developer.apple.com/documentation/Darwin/Reference/ManPages/…
Quinn Taylor

Parece que la opción -c se eliminó en Mountain Lion (10.8). xattr -h ya no enumera -c y produce "-c no reconocido" cuando se usa. Muy doloroso ahora para eliminar atributos extendidos uno por uno.
helioz

1
-cno funciona para mí (OS X 10.6.8). -dtampoco tuvo ningún efecto aunque no se quejó. Tuve que nombrar explícitamente cada atributo extendido de esta manera: xattr -rd <attrname> <folder/file>(elimina de forma recursiva). Para averiguar los atributos presentes (probablemente los mismos atributos en todo el árbol de directorios) use xattr <dir/file>como en la respuesta anterior.
Mindthief

@mindtheif nadie mencionó aquí que esto requiere las herramientas de línea de comando xCode. En 10.6.8 se llama algo diferente. Aquí hay un enlace a un instalador preconstruido en GitHub para que no tenga que instalar todo xCode para ver si este es su problema.

55
Con Xcode instalado en mi sistema 10.8.5, xattr -cfunciona bien para mí (y eliminó con éxito todos los metadatos).
Doktor J

103

Eliminar un atributo único en un archivo único

Ver la respuesta de Bavarious.


Para eliminar todos los atributos extendidos en un solo archivo

Use xattrcon la -cbandera para "borrar" los atributos:

xattr -c yourfile.txt



Para eliminar todos los atributos extendidos en muchos archivos

Para eliminar recursivamente los atributos extendidos en todos los archivos en un directorio, combine la -cbandera "borrar" con la -rbandera recursiva:

xattr -rc /path/to/directory



Un consejo para usuarios de Mac OS X

¿Tienes un largo camino con espacios o caracteres especiales?

Abra Terminal.appy comience a escribir xattr -rc, incluya un espacio final y luego arrastre el archivo o carpeta a la Terminal.appventana y agregará automáticamente la ruta completa con el escape adecuado.


1
-cfalla en OS X 10.5: option -c not recognized. Usamos uno para probar en el PowerPC de Apple. Parece que la versión de nivel inferior de OS X es compatible con -l, -p, -wy -d.
jww

@cwd: el Finder arrastrar y soltar en el terminal no funciona con algunos archivos de Finder 'especiales' . textClippingcomo los descritos en apple.stackexchange.com/questions/301871/…
ccpizza

@jww Explico por qué obtienes el error en mi respuesta a continuación. stackoverflow.com/a/58616002/1896134
JayRizzo

23

Intenta usar:

xattr -rd com.apple.quarantine directoryname

Esto se encarga de eliminar de forma recursiva el atributo molesto en todas partes.


7

Otro enfoque recursivo:

# 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

-cfalla en OS X 10.5: option -c not recognized. Usamos uno para probar en el PowerPC de Apple. Parece que la versión de nivel inferior de OS X es compatible con -l, -p, -wy -d.
jww

@jww Explico por qué obtienes el error en mi respuesta a continuación. stackoverflow.com/a/58616002/1896134
JayRizzo

4

Respuesta (archivos individuales)


1. Muestra las claves para usar en la selección.

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. Elija una clave para eliminar.

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. Vuelva a mostrar las llaves para ver si se han eliminado.

xattr -l ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

4. Por último, QUITE TODAS las teclas para un archivo en particular

xattr -c ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png

Respuesta (todos los archivos en un directorio)


1. Muestra las claves para usar en la selección.

xattr -r ~/Desktop

2. Eliminar una clave específica para CADA ARCHIVO en un directorio

xattr -rd com.apple.FinderInfo ~/Desktop

3. Elimine TODAS las claves en CADA ARCHIVO en un directorio

xattr -rc ~/Desktop

ADVERTENCIA: Una vez que elimine estos, ¡NO los recuperará!
ERROR DE FALLO: NO HAY UNDO.


Errores


Quería abordar el error que la gente está recibiendo. Porque los errores también me volvieron loco ... En una Mac si instala xattren Python, entonces su entorno puede tener un problema.

Hay dos caminos diferentes en mi mac para xattr

type -a xattr

    # xattr is /usr/local/bin/xattr    # PYTHON Installed Version
    # xattr is /usr/bin/xattr          # Mac OSX Installed Version

Entonces, en uno de los ejemplos en los -cque no funcionará en xargs es porque en bash se establece de manera predeterminada la versión que no es python.

Funciona con -c

/usr/bin/xattr -c

NO funciona con -c

/usr/local/bin/xattr -c
    # option -c not recognized

Mi Shell / Terminal predeterminado es / usr / local / bin / xattr porque mi $PATH /usr/local/bin:es antes de /usr/bin:lo que creo que es el predeterminado.

Puedo probar esto porque, si intentas desinstalar Python xattr, verás:

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)?

Soluciones alternativas


Para corregir option -c not recognizederrores.

  1. Desinstale cualquier Python xattrque pueda tener:pip3 uninstall xattr
  2. Cerrar todas las Terminalventanas y salirTerminal
  3. Vuelva a abrir una nueva Terminalventana.
  4. Vuelva a ejecutar el xattrcomando y ahora debería funcionar.

O

Si desea mantener Python xattr, use

/usr/bin/xattr

para cualquier Shellcomando enTerminal


Ejemplo:


La versión de Python de xattrno maneja imágenes en absoluto:

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

Páginas Man

PÁGINA MAN para OSX xattr

PÁGINA DEL HOMBRE para Python xattr VERSIÓN 0.6.4

NOTA: No pude encontrar la página de ayuda de Python para la VERSIÓN 0.9.6 actual

¡Gracias por leer!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.