How to get a list of all owners of files in a directory


up vote
11
down vote
favorite
I am currently trying to fix my quota system. My problem is that I cannot determine if all files in a directory are owned by the same user. If possible is there a way to list the different owners of files in a directory (recursively).
e.g get-owners-of DIRNAME
command-line permissions filesystem quota
add a comment |Â
up vote
11
down vote
favorite
I am currently trying to fix my quota system. My problem is that I cannot determine if all files in a directory are owned by the same user. If possible is there a way to list the different owners of files in a directory (recursively).
e.g get-owners-of DIRNAME
command-line permissions filesystem quota
1
So do you want to list all owners only, or all files with their owners, or all files owned by anyone other than a specific user?
â Byte Commander
Apr 21 at 13:15
add a comment |Â
up vote
11
down vote
favorite
up vote
11
down vote
favorite
I am currently trying to fix my quota system. My problem is that I cannot determine if all files in a directory are owned by the same user. If possible is there a way to list the different owners of files in a directory (recursively).
e.g get-owners-of DIRNAME
command-line permissions filesystem quota
I am currently trying to fix my quota system. My problem is that I cannot determine if all files in a directory are owned by the same user. If possible is there a way to list the different owners of files in a directory (recursively).
e.g get-owners-of DIRNAME
command-line permissions filesystem quota
edited Apr 22 at 21:09


dessert
19.8k55594
19.8k55594
asked Apr 21 at 13:08


Jack7076
75117
75117
1
So do you want to list all owners only, or all files with their owners, or all files owned by anyone other than a specific user?
â Byte Commander
Apr 21 at 13:15
add a comment |Â
1
So do you want to list all owners only, or all files with their owners, or all files owned by anyone other than a specific user?
â Byte Commander
Apr 21 at 13:15
1
1
So do you want to list all owners only, or all files with their owners, or all files owned by anyone other than a specific user?
â Byte Commander
Apr 21 at 13:15
So do you want to list all owners only, or all files with their owners, or all files owned by anyone other than a specific user?
â Byte Commander
Apr 21 at 13:15
add a comment |Â
4 Answers
4
active
oldest
votes
up vote
19
down vote
accepted
stat -c %U *
will list owners of all files.
This can be sorted and duplicates removed by piping it into sort -u
:
stat -c %U * | sort -u
As pointed out by steeldriver, this is not recursive. I missed that this was asked for. It can be made recursive by enabling globstar:
shopt -s globstar
stat -c %U **/* | sort -u
Alltogether, steeldriver's answer is probably better and should be the accepted answer here :)
Won't that go over the command-line length, if there is a large number of files in the search? If so, then @steeldriver 's answer is better.
â CSM
Apr 21 at 17:00
@CSM it will. Which is why I say that steeldrivers answer is a better one in many cases.
â vidarlo
Apr 21 at 17:01
2
@CSM I guess ifARG_MAX
is an issue you could doprintf '%s' **/* | xargs -0 stat -c %U
(sinceprintf
is a builtin, it shouldn't have the same length limitation)
â steeldriver
Apr 21 at 17:09
add a comment |Â
up vote
20
down vote
You can use find
to print the user (owner) and group and then extract the uniq combinations e.g.
$ sudo find /var -printf '%u:%gn' | sort -t: -u
_apt:root
avahi-autoipd:avahi-autoipd
clamav:adm
clamav:clamav
colord:colord
daemon:daemon
lightdm:lightdm
lp:lp
man:root
root:adm
root:crontab
root:lp
root:mail
root:mlocate
root:root
root:shadow
root:staff
root:syslog
root:utmp
root:whoopsie
speech-dispatcher:root
statd:nogroup
steeldriver:crontab
steeldriver:lightdm
steeldriver:steeldriver
syslog:adm
systemd-timesync:systemd-timesync
testuser:crontab
1
To evaluate directory content only (and not the root directory/-ies of the search itself) add-mindepth 1
before-printf
. And I wouldn't includesudo
in the example when OP doesn't appear to work in a context where it's required.
â David Foerster
Apr 21 at 22:54
Does-t:
make a difference in this context?
â kasperd
Apr 22 at 22:55
@kasperd good point - probably not (it might affect the sort order - but we're not really interested in that)
â steeldriver
Apr 23 at 1:06
add a comment |Â
up vote
5
down vote
You may find it more efficient to directly search for the files not owned by the user ...
find /directory ! -user username -printf "%u %pn"
add a comment |Â
up vote
4
down vote
DIY method via Python:
#!/usr/bin/env python3
import sys,os,pwd
for f in sys.argv[1:]:
username = pwd.getpwuid(os.stat(f).st_uid).pw_name
print( ":".join([f,username]) )
This iterates over all filenames listed on command-line, gets UID of the file's owner, and using pwd module gets the username of the owner. After that, filename and username joined for pretty printing and separated via colon. Works as so:
$ ./get_owners.py /etc/*
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .
add a comment |Â
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
19
down vote
accepted
stat -c %U *
will list owners of all files.
This can be sorted and duplicates removed by piping it into sort -u
:
stat -c %U * | sort -u
As pointed out by steeldriver, this is not recursive. I missed that this was asked for. It can be made recursive by enabling globstar:
shopt -s globstar
stat -c %U **/* | sort -u
Alltogether, steeldriver's answer is probably better and should be the accepted answer here :)
Won't that go over the command-line length, if there is a large number of files in the search? If so, then @steeldriver 's answer is better.
â CSM
Apr 21 at 17:00
@CSM it will. Which is why I say that steeldrivers answer is a better one in many cases.
â vidarlo
Apr 21 at 17:01
2
@CSM I guess ifARG_MAX
is an issue you could doprintf '%s' **/* | xargs -0 stat -c %U
(sinceprintf
is a builtin, it shouldn't have the same length limitation)
â steeldriver
Apr 21 at 17:09
add a comment |Â
up vote
19
down vote
accepted
stat -c %U *
will list owners of all files.
This can be sorted and duplicates removed by piping it into sort -u
:
stat -c %U * | sort -u
As pointed out by steeldriver, this is not recursive. I missed that this was asked for. It can be made recursive by enabling globstar:
shopt -s globstar
stat -c %U **/* | sort -u
Alltogether, steeldriver's answer is probably better and should be the accepted answer here :)
Won't that go over the command-line length, if there is a large number of files in the search? If so, then @steeldriver 's answer is better.
â CSM
Apr 21 at 17:00
@CSM it will. Which is why I say that steeldrivers answer is a better one in many cases.
â vidarlo
Apr 21 at 17:01
2
@CSM I guess ifARG_MAX
is an issue you could doprintf '%s' **/* | xargs -0 stat -c %U
(sinceprintf
is a builtin, it shouldn't have the same length limitation)
â steeldriver
Apr 21 at 17:09
add a comment |Â
up vote
19
down vote
accepted
up vote
19
down vote
accepted
stat -c %U *
will list owners of all files.
This can be sorted and duplicates removed by piping it into sort -u
:
stat -c %U * | sort -u
As pointed out by steeldriver, this is not recursive. I missed that this was asked for. It can be made recursive by enabling globstar:
shopt -s globstar
stat -c %U **/* | sort -u
Alltogether, steeldriver's answer is probably better and should be the accepted answer here :)
stat -c %U *
will list owners of all files.
This can be sorted and duplicates removed by piping it into sort -u
:
stat -c %U * | sort -u
As pointed out by steeldriver, this is not recursive. I missed that this was asked for. It can be made recursive by enabling globstar:
shopt -s globstar
stat -c %U **/* | sort -u
Alltogether, steeldriver's answer is probably better and should be the accepted answer here :)
edited Apr 21 at 14:15
answered Apr 21 at 13:17


vidarlo
7,12342140
7,12342140
Won't that go over the command-line length, if there is a large number of files in the search? If so, then @steeldriver 's answer is better.
â CSM
Apr 21 at 17:00
@CSM it will. Which is why I say that steeldrivers answer is a better one in many cases.
â vidarlo
Apr 21 at 17:01
2
@CSM I guess ifARG_MAX
is an issue you could doprintf '%s' **/* | xargs -0 stat -c %U
(sinceprintf
is a builtin, it shouldn't have the same length limitation)
â steeldriver
Apr 21 at 17:09
add a comment |Â
Won't that go over the command-line length, if there is a large number of files in the search? If so, then @steeldriver 's answer is better.
â CSM
Apr 21 at 17:00
@CSM it will. Which is why I say that steeldrivers answer is a better one in many cases.
â vidarlo
Apr 21 at 17:01
2
@CSM I guess ifARG_MAX
is an issue you could doprintf '%s' **/* | xargs -0 stat -c %U
(sinceprintf
is a builtin, it shouldn't have the same length limitation)
â steeldriver
Apr 21 at 17:09
Won't that go over the command-line length, if there is a large number of files in the search? If so, then @steeldriver 's answer is better.
â CSM
Apr 21 at 17:00
Won't that go over the command-line length, if there is a large number of files in the search? If so, then @steeldriver 's answer is better.
â CSM
Apr 21 at 17:00
@CSM it will. Which is why I say that steeldrivers answer is a better one in many cases.
â vidarlo
Apr 21 at 17:01
@CSM it will. Which is why I say that steeldrivers answer is a better one in many cases.
â vidarlo
Apr 21 at 17:01
2
2
@CSM I guess if
ARG_MAX
is an issue you could do printf '%s' **/* | xargs -0 stat -c %U
(since printf
is a builtin, it shouldn't have the same length limitation)â steeldriver
Apr 21 at 17:09
@CSM I guess if
ARG_MAX
is an issue you could do printf '%s' **/* | xargs -0 stat -c %U
(since printf
is a builtin, it shouldn't have the same length limitation)â steeldriver
Apr 21 at 17:09
add a comment |Â
up vote
20
down vote
You can use find
to print the user (owner) and group and then extract the uniq combinations e.g.
$ sudo find /var -printf '%u:%gn' | sort -t: -u
_apt:root
avahi-autoipd:avahi-autoipd
clamav:adm
clamav:clamav
colord:colord
daemon:daemon
lightdm:lightdm
lp:lp
man:root
root:adm
root:crontab
root:lp
root:mail
root:mlocate
root:root
root:shadow
root:staff
root:syslog
root:utmp
root:whoopsie
speech-dispatcher:root
statd:nogroup
steeldriver:crontab
steeldriver:lightdm
steeldriver:steeldriver
syslog:adm
systemd-timesync:systemd-timesync
testuser:crontab
1
To evaluate directory content only (and not the root directory/-ies of the search itself) add-mindepth 1
before-printf
. And I wouldn't includesudo
in the example when OP doesn't appear to work in a context where it's required.
â David Foerster
Apr 21 at 22:54
Does-t:
make a difference in this context?
â kasperd
Apr 22 at 22:55
@kasperd good point - probably not (it might affect the sort order - but we're not really interested in that)
â steeldriver
Apr 23 at 1:06
add a comment |Â
up vote
20
down vote
You can use find
to print the user (owner) and group and then extract the uniq combinations e.g.
$ sudo find /var -printf '%u:%gn' | sort -t: -u
_apt:root
avahi-autoipd:avahi-autoipd
clamav:adm
clamav:clamav
colord:colord
daemon:daemon
lightdm:lightdm
lp:lp
man:root
root:adm
root:crontab
root:lp
root:mail
root:mlocate
root:root
root:shadow
root:staff
root:syslog
root:utmp
root:whoopsie
speech-dispatcher:root
statd:nogroup
steeldriver:crontab
steeldriver:lightdm
steeldriver:steeldriver
syslog:adm
systemd-timesync:systemd-timesync
testuser:crontab
1
To evaluate directory content only (and not the root directory/-ies of the search itself) add-mindepth 1
before-printf
. And I wouldn't includesudo
in the example when OP doesn't appear to work in a context where it's required.
â David Foerster
Apr 21 at 22:54
Does-t:
make a difference in this context?
â kasperd
Apr 22 at 22:55
@kasperd good point - probably not (it might affect the sort order - but we're not really interested in that)
â steeldriver
Apr 23 at 1:06
add a comment |Â
up vote
20
down vote
up vote
20
down vote
You can use find
to print the user (owner) and group and then extract the uniq combinations e.g.
$ sudo find /var -printf '%u:%gn' | sort -t: -u
_apt:root
avahi-autoipd:avahi-autoipd
clamav:adm
clamav:clamav
colord:colord
daemon:daemon
lightdm:lightdm
lp:lp
man:root
root:adm
root:crontab
root:lp
root:mail
root:mlocate
root:root
root:shadow
root:staff
root:syslog
root:utmp
root:whoopsie
speech-dispatcher:root
statd:nogroup
steeldriver:crontab
steeldriver:lightdm
steeldriver:steeldriver
syslog:adm
systemd-timesync:systemd-timesync
testuser:crontab
You can use find
to print the user (owner) and group and then extract the uniq combinations e.g.
$ sudo find /var -printf '%u:%gn' | sort -t: -u
_apt:root
avahi-autoipd:avahi-autoipd
clamav:adm
clamav:clamav
colord:colord
daemon:daemon
lightdm:lightdm
lp:lp
man:root
root:adm
root:crontab
root:lp
root:mail
root:mlocate
root:root
root:shadow
root:staff
root:syslog
root:utmp
root:whoopsie
speech-dispatcher:root
statd:nogroup
steeldriver:crontab
steeldriver:lightdm
steeldriver:steeldriver
syslog:adm
systemd-timesync:systemd-timesync
testuser:crontab
answered Apr 21 at 13:19
steeldriver
62.8k1197165
62.8k1197165
1
To evaluate directory content only (and not the root directory/-ies of the search itself) add-mindepth 1
before-printf
. And I wouldn't includesudo
in the example when OP doesn't appear to work in a context where it's required.
â David Foerster
Apr 21 at 22:54
Does-t:
make a difference in this context?
â kasperd
Apr 22 at 22:55
@kasperd good point - probably not (it might affect the sort order - but we're not really interested in that)
â steeldriver
Apr 23 at 1:06
add a comment |Â
1
To evaluate directory content only (and not the root directory/-ies of the search itself) add-mindepth 1
before-printf
. And I wouldn't includesudo
in the example when OP doesn't appear to work in a context where it's required.
â David Foerster
Apr 21 at 22:54
Does-t:
make a difference in this context?
â kasperd
Apr 22 at 22:55
@kasperd good point - probably not (it might affect the sort order - but we're not really interested in that)
â steeldriver
Apr 23 at 1:06
1
1
To evaluate directory content only (and not the root directory/-ies of the search itself) add
-mindepth 1
before -printf
. And I wouldn't include sudo
in the example when OP doesn't appear to work in a context where it's required.â David Foerster
Apr 21 at 22:54
To evaluate directory content only (and not the root directory/-ies of the search itself) add
-mindepth 1
before -printf
. And I wouldn't include sudo
in the example when OP doesn't appear to work in a context where it's required.â David Foerster
Apr 21 at 22:54
Does
-t:
make a difference in this context?â kasperd
Apr 22 at 22:55
Does
-t:
make a difference in this context?â kasperd
Apr 22 at 22:55
@kasperd good point - probably not (it might affect the sort order - but we're not really interested in that)
â steeldriver
Apr 23 at 1:06
@kasperd good point - probably not (it might affect the sort order - but we're not really interested in that)
â steeldriver
Apr 23 at 1:06
add a comment |Â
up vote
5
down vote
You may find it more efficient to directly search for the files not owned by the user ...
find /directory ! -user username -printf "%u %pn"
add a comment |Â
up vote
5
down vote
You may find it more efficient to directly search for the files not owned by the user ...
find /directory ! -user username -printf "%u %pn"
add a comment |Â
up vote
5
down vote
up vote
5
down vote
You may find it more efficient to directly search for the files not owned by the user ...
find /directory ! -user username -printf "%u %pn"
You may find it more efficient to directly search for the files not owned by the user ...
find /directory ! -user username -printf "%u %pn"
answered Apr 21 at 18:47
rrauenza
28113
28113
add a comment |Â
add a comment |Â
up vote
4
down vote
DIY method via Python:
#!/usr/bin/env python3
import sys,os,pwd
for f in sys.argv[1:]:
username = pwd.getpwuid(os.stat(f).st_uid).pw_name
print( ":".join([f,username]) )
This iterates over all filenames listed on command-line, gets UID of the file's owner, and using pwd module gets the username of the owner. After that, filename and username joined for pretty printing and separated via colon. Works as so:
$ ./get_owners.py /etc/*
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .
add a comment |Â
up vote
4
down vote
DIY method via Python:
#!/usr/bin/env python3
import sys,os,pwd
for f in sys.argv[1:]:
username = pwd.getpwuid(os.stat(f).st_uid).pw_name
print( ":".join([f,username]) )
This iterates over all filenames listed on command-line, gets UID of the file's owner, and using pwd module gets the username of the owner. After that, filename and username joined for pretty printing and separated via colon. Works as so:
$ ./get_owners.py /etc/*
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .
add a comment |Â
up vote
4
down vote
up vote
4
down vote
DIY method via Python:
#!/usr/bin/env python3
import sys,os,pwd
for f in sys.argv[1:]:
username = pwd.getpwuid(os.stat(f).st_uid).pw_name
print( ":".join([f,username]) )
This iterates over all filenames listed on command-line, gets UID of the file's owner, and using pwd module gets the username of the owner. After that, filename and username joined for pretty printing and separated via colon. Works as so:
$ ./get_owners.py /etc/*
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .
DIY method via Python:
#!/usr/bin/env python3
import sys,os,pwd
for f in sys.argv[1:]:
username = pwd.getpwuid(os.stat(f).st_uid).pw_name
print( ":".join([f,username]) )
This iterates over all filenames listed on command-line, gets UID of the file's owner, and using pwd module gets the username of the owner. After that, filename and username joined for pretty printing and separated via colon. Works as so:
$ ./get_owners.py /etc/*
/etc/acpi:root
/etc/adduser.conf:root
/etc/alternatives:root
. . .
answered Apr 21 at 16:41


Sergiy Kolodyazhnyy
64.9k9129282
64.9k9129282
add a comment |Â
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1026934%2fhow-to-get-a-list-of-all-owners-of-files-in-a-directory%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
1
So do you want to list all owners only, or all files with their owners, or all files owned by anyone other than a specific user?
â Byte Commander
Apr 21 at 13:15