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.
[~/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:
[~/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:
[~/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.
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:
[~/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!