macos - How do I remove the "extended attributes" on a file in Mac OS X?

ID : 10396

viewed : 32

Tags : macosattributesmacos

Top 5 Answer for macos - How do I remove the "extended attributes" on a file in Mac OS X?

vote vote

96

Use the xattr command. You can inspect the extended attributes:

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

and use the -d option to delete one extended attribute:

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

you can also use the -c option to remove all extended attributes:

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

xattr -h will show you the command line options, and xattr has a man page.

vote vote

86

Removing a Single Attribute on a Single File

See Bavarious's answer.


To Remove All Extended Attributes On a Single File

Use xattr with the -c flag to "clear" the attributes:

xattr -c yourfile.txt 



To Remove All Extended Attributes On Many Files

To recursively remove extended attributes on all files in a directory, combine the -c "clear" flag with the -r recursive flag:

xattr -rc /path/to/directory 



A Tip for Mac OS X Users

Have a long path with spaces or special characters?

Open Terminal.app and start typing xattr -rc, include a trailing space, and then then drag the file or folder to the Terminal.app window and it will automatically add the full path with proper escaping.

vote vote

79

Try using:

xattr -rd com.apple.quarantine directoryname 

This takes care of recursively removing the pesky attribute everywhere.

vote vote

62


Answer (Individual Files)


1. Showcase keys to use in selection.

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. Pick a Key to delete.

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. Showcase keys again to see they have been removed.

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

4. Lastly, REMOVE ALL keys for a particular file

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

Answer (All Files In A Directory)


1. Showcase keys to use in selection.

xattr -r ~/Desktop 

2. Remove a Specific Key for EVERY FILE in a directory

xattr -rd com.apple.FinderInfo ~/Desktop 

3. Remove ALL keys on EVERY FILE in a directory

xattr -rc ~/Desktop 

WARN: Once you delete these you DON'T get them back!
FAULT ERROR: There is NO UNDO.


Errors


I wanted to address the error's people are getting. Because the errors drove me nuts too... On a mac if you install xattr in python, then your environment may have an issue.

There are two different paths on my mac for xattr

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

So in one of the example's where -c will not work in xargs is because in bash you default to the non-python version.

Works with -c

/usr/bin/xattr -c 

Does NOT Work with -c

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

My Shell/Terminal defaults to /usr/local/bin/xattr because my $PATH /usr/local/bin: is before /usr/bin: which I believe is the default.

I can prove this because, if you try to uninstall the python xattr you will see:

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

Workarounds


To Fix option -c not recognized Errors.

  1. Uninstall any Python xattr you may have: pip3 uninstall xattr
  2. Close all Terminal windows & quit Terminal
  3. Reopen a new Terminal window.
  4. ReRun xattr command and it should now work.

OR

If you want to keep the Python xattr then use

/usr/bin/xattr 

for any Shell commands in Terminal


Example:


Python's version of xattr doesn't handle images at all:

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 

Man Pages

MAN PAGE for OSX xattr

MAN PAGE for Python xattr VERSION 0.6.4

NOTE: I could not find the python help page for current VERSION 0.9.6

Thanks for Reading!

vote vote

55

Another recursive approach:

# 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 

Top 3 video Explaining macos - How do I remove the "extended attributes" on a file in Mac OS X?

Related QUESTION?