#1 Le 17/05/2018, à 10:41
- maxire
[Compris, il me semble!] xargs: ligne de commande générée en trop
Saut,
Le mieux est de montrer le résultat que j'obtiens:
[aspire7730z@asus-arch ~]$ getent passwd | awk -F : '$3 > 1000 { if ($3 != 1100) print $6 }'
/home/pirate
/var/lib/xdmcp
/home/poupoune
[aspire7730z@asus-arch ~]$ getent passwd | awk -F : '$3 > 1000 { if ($3 != 1100) print $6 }' | xargs -n 1 -p /bin/cp .bashrc
/bin/cp .bashrc /home/pirate ?...n
/bin/cp .bashrc /var/lib/xdmcp ?...n
/bin/cp .bashrc /home/poupoune ?...n
/bin/cp .bashrc ?...n
[aspire7730z@asus-arch ~]$
Je ne comprends pas.
D'où vient la dernière ligne de commande cp générée?
/bin/cp .bashrc
J'ai beau lire et relire la page man de xargs, quelque chose m'échappe.
Dernière modification par maxire (Le 17/05/2018, à 12:45)
Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail
Hors ligne
#2 Le 17/05/2018, à 12:44
- maxire
Re : [Compris, il me semble!] xargs: ligne de commande générée en trop
Je me réponds à moi-même, cela semble être un bug du à l'utilisation de l'option -p de xargs, car si je réponds y au lieu de n tout semble fonctionner aux autorisations d'accès près!
[aspire7730z@asus-arch ~]$ getent passwd | awk -F : '$3 > 1000 { if ($3 != 1100) print $6 }' | xargs -n 1 -p /bin/cp .bashrc
/bin/cp .bashrc /home/pirate ?...y
/bin/cp: impossible d'évaluer '/home/pirate/.bashrc': Permission non accordée
/bin/cp .bashrc /var/lib/xdmcp ?...y
/bin/cp: impossible d'évaluer '/var/lib/xdmcp/.bashrc': Permission non accordée
/bin/cp .bashrc /home/poupoune ?...y
/bin/cp: impossible d'évaluer '/home/poupoune/.bashrc': Permission non accordée
[aspire7730z@asus-arch ~]$
Dernière modification par maxire (Le 17/05/2018, à 12:45)
Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail
Hors ligne
#3 Le 19/05/2018, à 13:41
- LeoMajor
Re : [Compris, il me semble!] xargs: ligne de commande générée en trop
bonjour,
sudo awk 'function copie(item) { cmd="cp /home/toto/scripts/hello.txt "item"/"; print cmd; while(cmd|getline tmp)print tmp;close(cmd)}; BEGIN {FS=":"}; $3==1002 {print $1,$6; copie($6)}' /etc/passwd
Hors ligne
#4 Le 16/06/2018, à 16:49
- maxire
Re : [Compris, il me semble!] xargs: ligne de commande générée en trop
Finalement, une solution possible sans xargs serait:
[aspire7730z@asus-arch ~]$ getent passwd | sudo awk -F : 'function copier(home,uid,gid) { cmd="cp -v /home/aspire7730z/toto "home"/ && chown "uid":"gid" "home"/toto"; print cmd; while (cmd|getline tmp); print tmp; close(cmd) }; $3 > 1000 { if ($3 != 1100) copier($6,$3,$4)}'
cp -v /home/aspire7730z/toto /home/pirate/ && chown 1101:1101 /home/pirate/toto
'/home/aspire7730z/toto' -> '/home/pirate/toto'
cp -v /home/aspire7730z/toto /var/lib/xdmcp/ && chown 1102:1102 /var/lib/xdmcp/toto
'/home/aspire7730z/toto' -> '/var/lib/xdmcp/toto'
cp -v /home/aspire7730z/toto /home/poupoune/ && chown 1003:1004 /home/poupoune/toto
'/home/aspire7730z/toto' -> '/home/poupoune/toto'
[aspire7730z@asus-arch ~]$ sudo ls -l /home/pirate/toto
-rw-rw-r-- 1 pirate pirate 0 16 juin 17:44 /home/pirate/toto
[aspire7730z@asus-arch ~]$
Je commence à beaucoup apprécier awk, c'est assez puissant comme outil!
Merci LeoMajor.
Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail
Hors ligne