How do I remove the “extended attributes” on a file in Mac OS X?

前端 未结 5 1707
时光说笑
时光说笑 2020-12-02 03:22

I have an AppleScript script that runs a stress test. Part of the test is to open, save, and close certain files. Somehow, the files have picked up some \"extended attribute

相关标签:
5条回答

  • 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!

    0 讨论(0)
  • 2020-12-02 03:56

    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.

    0 讨论(0)
  • 2020-12-02 03:56

    Try using:

    xattr -rd com.apple.quarantine directoryname
    

    This takes care of recursively removing the pesky attribute everywhere.

    0 讨论(0)
  • 2020-12-02 03:57

    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
    
    0 讨论(0)
  • 2020-12-02 04:16

    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.

    0 讨论(0)
提交回复
热议问题