BASH script to delete mac extended attributes

Sometimes when you download lots of junk from the internet, MacOSX likes to stomp all over your files leaving pesky little sprinkles of annoyance called “extended attributes”

They show up when ever you ls -l as little @ symbols at the end of the file mode section.

Terminal
[~/tmp] [17:06:17 mburke]$ ls -l total 40 -rw-r--r--@ 1 mburke staff 18946 Sep 24 17:05 image-from-internet.png

You can view the attributes with the xattr command:

Terminal
[~/tmp] [17:06:18 mburke]$ xattr image-from-internet.png com.apple.metadata:kMDItemWhereFroms com.apple.quarantine

There is also a handy switch to ls that can show them inline:

Terminal
[~/tmp] [17:09:37 mburke]$ ls -l@ total 40 -rw-r--r--@ 1 mburke staff 18946 Sep 24 17:05 image-from-internet.png com.apple.metadata:kMDItemWhereFroms 120 com.apple.quarantine 68

You can remove them one at a time with xattr -d $NAME_OF_ATTRIBUTE, but this is really obnoxious. You first would have to look up which attributes are applied, and then type in the name of each one.

So I’ve got this script in my $PATH that can do it for me.

~/bin/xattr-rm
#!/bin/bash while (( "$#" )); do xattr $1 | while read attr; do echo "removing $attr from $1" xattr -d $attr $1 done shift done

Now when I want to kill them, it’s an easy one-liner:

Terminal
[~/tmp] [17:11:53 mburke]$ xattr-rm image-from-internet.png removing com.apple.metadata:kMDItemWhereFroms from image-from-internet.png removing com.apple.quarantine from image-from-internet.png [~/tmp] [17:12:36 mburke]$ ls -l total 40 -rw-r--r-- 1 mburke staff 18946 Sep 24 17:05 image-from-internet.png

You could even do a whole folder at once with xattr-rm * or use find . to -exec the command over every file in a directory.

Yay scripting!