OVH Cloud OVH Cloud

script

5 réponses
Avatar
thierry.rouillon
Bonsoir. Je suis coincé sur un script. Il me faut remplir une variable avec
le nom utilisateur et le groupe d'un autre fichier, mais je ne connais pas
la manip. Pour une petite aide, Merci.
--
Thierry de Champagne... pour me repondre remplacer 9 par 9online

5 réponses

Avatar
Stephane Chazelas
2004-11-08, 16:17(+01), thierry.rouillon:
Bonsoir. Je suis coincé sur un script. Il me faut remplir une variable avec
le nom utilisateur et le groupe d'un autre fichier, mais je ne connais pas
la manip. Pour une petite aide, Merci.



FILE=/some/file
eval "$(stat -c "user='%U' group='%G'" -- "$FILE")"

printf "L'utilisateur est '%s'n" "$user"
printf "Le groupe est '%s'n" "$group"

Note que la commande "stat" est GNU specific. Autrement dit, ca
ne marchera pas sur d'autres Unix.(il y aura des problemes aussi
si le user ou le group contient un apostrophe, auquel cas tu
peux faire:
user=$(stat -c %U -- "$FILE") group=$(stat -c %G -- "$FILE")
)

Pour etre portable, utiliser ls ou mieux ecrire un script perl
au lieu d'un script shell.

set -f
IFS=" "
set x $(LC_ALL=C ls -ld -- "$FILE")
user=$4 group=$5

(ca pourra ne pas marcher dans certains vieux Unix ou dans
certains corner cases (quand des champs se touchent ou que user
ou group contient des espaces))

Enfin, zsh a un module stat integré.

zmodload zsh/stat
stat -s -H info -- $FILE
print -r "l'utilisateur est $info[uid], le groupe est $info[gid]"

--
Stephane

Avatar
TiChou
Dans le message <news:cmo2ml$543$,
*thierry.rouillon* tapota sur f.c.o.l.configuration :

Bonsoir.


Bonjour,

Je suis coincé sur un script. Il me faut remplir une variable
avec le nom utilisateur et le groupe d'un autre fichier, mais je ne
connais pas la manip.


On peut utiliser la commande 'stat' disponible maintenant avec les coreutils
:

$ stat -c "%U" foo

retournera le nom du propriétaire du fichier 'foo'.

$ stat -c "%G" foo

retournera le nom du groupe du fichier 'foo'.

man stat

On peut aussi éventuellement utiliser la commande GNU find, même si ce n'est
pas son usage initial :

$ find foo -maxdepth 0 -printf "%un"

et

$ find foo -maxdepth 0 -printf "%gn"

man find

Pour une petite aide, Merci.


De rien. Notez que c'est une question qui a plus sa place sur le groupe
fr.comp.os.unix.

--
TiChou

Avatar
thierry.rouillon
Stephane Chazelas nous a gentiment écrit:

2004-11-08, 16:17(+01), thierry.rouillon:
Bonsoir. Je suis coincé sur un script. Il me faut remplir une variable
avec le nom utilisateur et le groupe d'un autre fichier, mais je ne
connais pas la manip. Pour une petite aide, Merci.



FILE=/some/file
eval "$(stat -c "user='%U' group='%G'" -- "$FILE")"

printf "L'utilisateur est '%s'n" "$user"
printf "Le groupe est '%s'n" "$group"

Note que la commande "stat" est GNU specific. Autrement dit, ca
ne marchera pas sur d'autres Unix.(il y aura des problemes aussi
si le user ou le group contient un apostrophe, auquel cas tu
peux faire:
user=$(stat -c %U -- "$FILE") group=$(stat -c %G -- "$FILE")
)

Pour etre portable, utiliser ls ou mieux ecrire un script perl
au lieu d'un script shell.

set -f
IFS=" "
set x $(LC_ALL=C ls -ld -- "$FILE")
user=$4 group=$5

(ca pourra ne pas marcher dans certains vieux Unix ou dans
certains corner cases (quand des champs se touchent ou que user
ou group contient des espaces))

Enfin, zsh a un module stat integré.

zmodload zsh/stat
stat -s -H info -- $FILE
print -r "l'utilisateur est $info[uid], le groupe est $info[gid]"

Ca fonctionne super. Merci

--
Thierry de Champagne... pour me repondre remplacer 9 par 9online


Avatar
thierry.rouillon
Stephane Chazelas nous a gentiment écrit:

2004-11-08, 16:17(+01), thierry.rouillon:
Bonsoir. Je suis coincé sur un script. Il me faut remplir une variable
avec le nom utilisateur et le groupe d'un autre fichier, mais je ne
connais pas la manip. Pour une petite aide, Merci.



FILE=/some/file
eval "$(stat -c "user='%U' group='%G'" -- "$FILE")"

printf "L'utilisateur est '%s'n" "$user"
printf "Le groupe est '%s'n" "$group"

Note que la commande "stat" est GNU specific. Autrement dit, ca
ne marchera pas sur d'autres Unix.(il y aura des problemes aussi
si le user ou le group contient un apostrophe, auquel cas tu
peux faire:
user=$(stat -c %U -- "$FILE") group=$(stat -c %G -- "$FILE")
)

J'ai du faire à mon avis une faute de syntaxe en appliquant la variable à

chown mais je voulais retirer les (')
chown -R %sn "$user": %sn "$groupe" /mnt/home_mag/asselec/data_magasin
chown: `%sn': usager invalide

Qu'en penses tu ?
--
Thierry de Champagne... pour me repondre remplacer 9 par 9online


Avatar
TiChou
Dans le message <news:cmokoh$gd7$,
*thierry.rouillon* tapota sur f.c.o.l.configuration :

Stephane Chazelas nous a gentiment écrit:

FILE=/some/file
eval "$(stat -c "user='%U' group='%G'" -- "$FILE")"

si le user ou le group contient un apostrophe, auquel cas tu
peux faire:
user=$(stat -c %U -- "$FILE") group=$(stat -c %G -- "$FILE")


chown -R %sn "$user": %sn "$groupe" /mnt/home_mag/asselec/data_magasin
chown: `%sn': usager invalide


chown -R "$user":"$groupe" /mnt/home_mag/asselec/data_magasin

--
TiChou