See extended attributes with coreutils ls on Mac
You can add extended attributes to coreutils ls. This is based on coreutils-8.22:
***************
*** 59,62 ****
--- 59,64 ----
#include <wchar.h>
+ #include <sys/xattr.h>
+
#if HAVE_LANGINFO_CODESET
# include <langinfo.h>
***************
*** 3056,3059 ****
--- 3058,3062 ----
: ACL_T_YES));
any_has_acl |= f->acl_type != ACL_T_NONE;
+ any_has_acl |= listxattr(f->name, NULL, 0, XATTR_NOFOLLOW);
if (err)
***************
*** 3811,3814 ****
--- 3814,3819 ----
if (! any_has_acl)
modebuf[10] = '\0';
+ else if (listxattr(f->name, NULL, 0, XATTR_NOFOLLOW) > 0)
+ modebuf[10] = '@';
else if (f->acl_type == ACL_T_SELINUX_ONLY)
modebuf[10] = '.';
Basically I looked in the OS X ls
source to find the logic for printing the @ (the listxattr
call) and hooked that into where coreutils ls
puts a symbol after the permissions. The three changes are:
- Including
xattr.h
- Set
any_has_acl
if any of the listings have extended attributes - this is required so that listings that don't have extended attributes have a space inserted after the permissions to line things up - Do the actual check by calling
listxattr
and conditionally setting the@
symbol - might be worth noting that they way this is written will show only the@
if there are both extended attributes and ACL
The XATTR_NOFOLLOW
argument tells listxattr
not to follow symlinks. That argument is used in OS X ls
.