Skip to content

Instantly share code, notes, and snippets.

@sroccaserra
Last active March 11, 2019 15:00
Show Gist options
  • Select an option

  • Save sroccaserra/58444a27160062f616520c7e512ddb92 to your computer and use it in GitHub Desktop.

Select an option

Save sroccaserra/58444a27160062f616520c7e512ddb92 to your computer and use it in GitHub Desktop.
Exploration de xargs
xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr] [-L number] [-n number [-x]] [-P maxprocs] [-s size] [utility [argument ...]]

La commande xargs ne va pas s'exécuter ligne par ligne, mais elle va regrouper les lignes qu'elle reçoit pour les passer à la commande.

$ find /bin -xdev -print0 | xargs -0 -t -n 10 -P4 true 2>&1 | less
true /bin /bin/cat /bin/echo /bin/launchctl /bin/df /bin/pwd /bin/test /bin/csh /bin/wait4path /bin/unlink
true /bin/sleep /bin/stty /bin/date /bin/ed /bin/expr /bin/pax /bin/bash /bin/kill /bin/sh /bin/ps
true /bin/link /bin/tcsh /bin/dd /bin/mkdir /bin/ksh /bin/hostname /bin/rmdir /bin/mv /bin/ln /bin/ls
true /bin/cp /bin/sync /bin/zsh /bin/chmod /bin/rm /bin/[

Par défaut, xargs interprète les espaces comme des séparateurs d'arguments (note : ici, printf boucle sur son pattern) :

$ ls /bin | awk '{ printf "cmd \'%s\' ", $0 }' | xargs printf "(%s) "
(cmd) ([) (cmd) (bash) (cmd) (cat) (cmd) (chmod) (cmd) (cp) (cmd) (csh) (cmd) (date) (cmd) (dd) (cmd) (df) (cmd) (echo) (cmd) (ed) (cmd) (expr) (cmd) (hostname) (cmd) (kill) (cmd) (ksh) (cmd) (launchctl) (cmd) (link) (cmd) (ln) (cmd) (ls) (cmd) (mkdir) (cmd) (mv) (cmd) (pax) (cmd) (ps) (cmd) (pwd) (cmd) (rm) (cmd) (rmdir) (cmd) (sh) (cmd) (sleep) (cmd) (stty) (cmd) (sync) (cmd) (tcsh) (cmd) (test) (cmd) (unlink) (cmd) (wait4path) (cmd) (zsh)

Pour avoir des arguments incluant des espaces, utiliser xargs -0. Avec awk, on peut utiliser printf pour insérer des \0 :

$ ls /bin | awk '{ printf "command: %s\0", $0 }' | xargs -0 printf "(%s) "
(command: [) (command: bash) (command: cat) (command: chmod) (command: cp) (command: csh) (command: date) (command: dd) (command: df) (command: echo) (command: ed) (command: expr) (command: hostname) (command: kill) (command: ksh) (command: launchctl) (command: link) (command: ln) (command: ls) (command: mkdir) (command: mv) (command: pax) (command: ps) (command: pwd) (command: rm) (command: rmdir) (command: sh) (command: sleep) (command: stty) (command: sync) (command: tcsh) (command: test) (command: unlink) (command: wait4path) (command: zsh)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment