how to sort files by their permissions using ls?
ls
does not directly support sorting by permissions, but you can combine it with the sort command:
ls -l | sort
You can use the -k
option to sort to start matching from a specific character, the format is -k FIELD.CHAR
, the permissions are the first field in the ls
output. So e.g. -k 1.2
will start from the second character of the permission string, which will ignore any directory / device / link etc. flag, or -k 1.5
for sorting by group permissions.
If you don't want the additional output of ls -l
, you can remove it with awk:
ls -l | sort | awk '{ print $1, $NF}'
This will print only the first field (the permissions) and the last one (the filename).
You can also sort by octal value.
for i in *; do stat --format="%a %n" "$i"; done | sort -n