OVH Cloud OVH Cloud

proprietaire d'un fichier ou repertoire

29 réponses
Avatar
Chabala bala
Bonjour

En dehors de la commande ls, quelle commande permet de recuperer dans
une variable le proprietaire (owner) d'un fichier ou repertoire ?

Par exemple
ls -l toto
-rwxrwxrwx NUM owner ...... toto

OWNER=` proprio toto`
echo $OWNER ---> owner

Merci

10 réponses

1 2 3
Avatar
Stephane Chazelas
2006-12-13, 05:50(-08), Chabala bala:
Bonjour

En dehors de la commande ls, quelle commande permet de recuperer dans
une variable le proprietaire (owner) d'un fichier ou repertoire ?

Par exemple
ls -l toto
-rwxrwxrwx NUM owner ...... toto

OWNER=` proprio toto`
echo $OWNER ---> owner
[...]


De standard, je ne crois pas qu'il y ait (a part pax, mais ca te
donnera la meme chose que ls).

Sinon, tu as GNU find file -prune -printf '%un', tu as aussi
GNU stat et zsh stat. Sinon, le plus portable (si tu ne veux pas
utilser ls) est probablement perl.

perl -le 'print ((getpwuid((stat$ARGV[0])[4]))[0])' -- "$file"

Note que le nom que tu recupere n'est qu'un des noms qui
correspond a l'uid a qui appartient le fichier.

get_owner() {
(
ls_output=$(ls -ld -- "$1") || return
IFS=" "
set -f
set -- $ls_output
printf '%sn' "$3"
)
}

Ca marchera dans la plupart des cas.

--
Stéphane

Avatar
Pascal Bourguignon
"Chabala bala" writes:

Bonjour

En dehors de la commande ls, quelle commande permet de recuperer dans
une variable le proprietaire (owner) d'un fichier ou repertoire ?

Par exemple
ls -l toto
-rwxrwxrwx NUM owner ...... toto

OWNER=` proprio toto`
echo $OWNER ---> owner


stat -c %U $file


--
__Pascal Bourguignon__ http://www.informatimago.com/

IMPORTANT NOTICE TO PURCHASERS: The entire physical universe,
including this product, may one day collapse back into an
infinitesimally small space. Should another universe subsequently
re-emerge, the existence of this product in that universe cannot be
guaranteed.

Avatar
Moi

De standard, je ne crois pas qu'il y ait (a part pax, mais ca te
donnera la meme chose que ls).


chez moi pax c'est un archiveur/désarchiveur

Sinon, tu as GNU find file -prune -printf '%un', tu as aussi
GNU stat et zsh stat. Sinon, le plus portable (si tu ne veux pas
utilser ls) est probablement perl.

perl -le 'print ((getpwuid((stat$ARGV[0])[4]))[0])' -- "$file"


les plus intrépides pourront également lire

man lstat
man stat
man getpwuid

Avatar
Stephane Chazelas
2006-12-13, 22:30(+01), Moi:

De standard, je ne crois pas qu'il y ait (a part pax, mais ca te
donnera la meme chose que ls).


chez moi pax c'est un archiveur/désarchiveur


Oui, mais pax -v sur une archive, te donne ce genre de details.

Donc pax -w | pax -v

te donnera ces informations (a condition que le fichier soit
lisible). Encore une fois, aucun interet par rapport a ls.

Sinon, tu as GNU find file -prune -printf '%un', tu as aussi
GNU stat et zsh stat. Sinon, le plus portable (si tu ne veux pas
utilser ls) est probablement perl.

perl -le 'print ((getpwuid((stat$ARGV[0])[4]))[0])' -- "$file"


les plus intrépides pourront également lire

man lstat
man stat
man getpwuid


qui n'aidera pas pour une solution shell toutefois.

--
Stéphane


Avatar
Chabala bala

perl -le 'print ((getpwuid((stat$ARGV[0])[4]))[0])' -- "$file"


Ceci me convient tres bien. J'avais essayé avec stat mais je ne
savais pas comment transformer l'UID en nom. Tu me donnes ici une
solution tres propre.

Merci

Avatar
Stephane Chazelas
2006-12-13, 23:46(-08), Chabala bala:


perl -le 'print ((getpwuid((stat$ARGV[0])[4]))[0])' -- "$file"


Ceci me convient tres bien. J'avais essayé avec stat mais je ne
savais pas comment transformer l'UID en nom. Tu me donnes ici une
solution tres propre.
[...]


Pas si propre, si le fichier n'existe pas, ca te donnera
surement "root". Faudrait verifier que stat marche d'abord.

Avec le stat de zsh:

stat -s +uid -- $file

Avec GNU stat

stat -c %U -- "$file"

--
Stéphane


Avatar
Chabala bala

2006-12-13, 23:46(-08), Chabala bala:


perl -le 'print ((getpwuid((stat$ARGV[0])[4]))[0])' -- "$file"


Ceci me convient tres bien. J'avais essayé avec stat mais je ne
savais pas comment transformer l'UID en nom. Tu me donnes ici une
solution tres propre.
[...]


Pas si propre, si le fichier n'existe pas, ca te donnera
surement "root". Faudrait verifier que stat marche d'abord.


$file est un repertoire et quand je lance la commande, je suis dedans.
Donc a prioris, pas de pb (sauf cas tordu que je ne prend pas en
compte)

Avec le stat de zsh:
stat -s +uid -- $file
Avec GNU stat
stat -c %U -- "$file"


Je n'ai pas trouvé la commande stat sur mon OS (Solaris). Pas grave.



Avatar
Moi


les plus intrépides pourront également lire
man lstat
man stat
man getpwuid


qui n'aidera pas pour une solution shell toutefois.


pourquoi la sortie standard d'un binaire à base de ses trois fonctions
ne serait pas récupérable dans un script ?


Avatar
Moi


perl -le 'print ((getpwuid((stat$ARGV[0])[4]))[0])' -- "$file"


Ceci me convient tres bien. J'avais essayé avec stat mais je ne
savais pas comment transformer l'UID en nom. Tu me donnes ici une
solution tres propre.


oui, mais ça pèse trois tonnes

il y a plus léger que le perl


Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:elsbqm$fm7$,
*Moi* tapota sur f.c.o.unix :

perl -le 'print ((getpwuid((stat$ARGV[0])[4]))[0])' -- "$file"



oui, mais ça pèse trois tonnes


Je vais finir par croire qu'il y a une invasion de marseillais sur Usenet
depuis quelques temps. ;-)

il y a plus léger que le perl


Mais moins portable et moins à la portée de tous.

--
Sébastien Monbrun aka TiChou



1 2 3