Utilisation de xargs

Sommaire

Index

xargs

L’option -n

$ touch {A..F}{a..c}.txt
$ ls | xargs -n 1 ls
Aa.txt
Ab.txt
Ac.txt
Ba.txt
Bb.txt
Bc.txt
Ca.txt
Cb.txt
Cc.txt
Da.txt
Db.txt
Dc.txt
Ea.txt
Eb.txt
Ec.txt
Fa.txt
Fb.txt
Fc.txt
$ ls | xargs -n 2 ls
Aa.txt  Ab.txt
Ac.txt  Ba.txt
Bb.txt  Bc.txt
Ca.txt  Cb.txt
Cc.txt  Da.txt
Db.txt  Dc.txt
Ea.txt  Eb.txt
Ec.txt  Fa.txt
Fb.txt  Fc.txt
$ ls | xargs -n 3 ls
Aa.txt  Ab.txt  Ac.txt
Ba.txt  Bb.txt  Bc.txt
Ca.txt  Cb.txt  Cc.txt
Da.txt  Db.txt  Dc.txt
Ea.txt  Eb.txt  Ec.txt
Fa.txt  Fb.txt  Fc.txt
$ ls | xargs -n 4 ls
Aa.txt  Ab.txt  Ac.txt  Ba.txt
Bb.txt  Bc.txt  Ca.txt  Cb.txt
Cc.txt  Da.txt  Db.txt  Dc.txt
Ea.txt  Eb.txt  Ec.txt  Fa.txt
Fb.txt  Fc.txt
$ ls | xargs -n 5 ls
Aa.txt  Ab.txt  Ac.txt  Ba.txt  Bb.txt
Bc.txt  Ca.txt  Cb.txt  Cc.txt  Da.txt
Db.txt  Dc.txt  Ea.txt  Eb.txt  Ec.txt
Fa.txt  Fb.txt  Fc.txt
$ ls | xargs -n 8 ls
Aa.txt  Ab.txt  Ac.txt  Ba.txt  Bb.txt  Bc.txt  Ca.txt  Cb.txt
Cc.txt  Da.txt  Db.txt  Dc.txt  Ea.txt  Eb.txt  Ec.txt  Fa.txt
Fb.txt  Fc.txt

Renommage

ls | xargs -n 1  bash -c 'nomfic=$0 ; echo mv ${nomfic} ${nomfic/%txt/md}'

Ecriture d’un nom de fichier dans le texte d’un autre

Utilisation de 2 arguments pour chaque commande

ls | xargs -n 2  bash -c 'src="$0" ; dest="$1" ; echo ${src} >> ${dest} '

L’option -I

ls | xargs -I{} bash -c 'nomfic={}; echo mv ${nomfic} ${nomfic/%txt/md}'

L’option -0

$ touch {A..F}" "{a..c}.txt
$ find . -type f
./F a.txt
#...
./F c.txt
$ find . -type f | xargs -n 1 file # Problème avec les noms avec espaces
./F: cannot open `./F' (No such file or directory)
a.txt: cannot open `a.txt' (No such file or directory)
#...
./F: cannot open `./F' (No such file or directory)
c.txt: cannot open `c.txt' (No such file or directory)
$ find . -type f -print0 | xargs -n 1 -0 file # Utilisation de null comme séparateur au lieu d'espace
./F a.txt: empty
./E a.txt: empty
#...
./D c.txt: empty
./F c.txt: empty

Recherche textuelle

$ find /etc -type f -and -readable | xargs -I{} grep -iHn keyboard {}
find: ‘/etc/ssl/private’: Permission denied
/etc/default/keyboard:1:# KEYBOARD CONFIGURATION FILE
/etc/default/keyboard:3:# Consult the keyboard(5) manual page.
/etc/init.d/keyboard-setup.sh:3:# Provides:          keyboard-setup.sh
/etc/init.d/keyboard-setup.sh:10:# Short-Description: Set the console keyboard layout
/etc/init.d/keyboard-setup.sh:11:# Description:       Set the console keyboard as early as possible
/etc/init.d/keyboard-setup.sh:38:       log_action_begin_msg "Setting up keyboard layout"
/etc/init.d/keyboard-setup.sh:39:            if /lib/console-setup/keyboard-setup.sh; then
/etc/init.d/keyboard-setup.sh:46:            echo 'Usage: /etc/init.d/keyboard-setup {start|reload|restart|force-reload|stop|status}'
/etc/console-setup/remap.inc:1:# The content of this file will be appended to the keyboard layout.
$ find /etc -type f -and -readable | xargs -n 1 grep -iHn keyboard
find: ‘/etc/ssl/private’: Permission denied
/etc/default/keyboard:1:# KEYBOARD CONFIGURATION FILE
/etc/default/keyboard:3:# Consult the keyboard(5) manual page.
/etc/init.d/keyboard-setup.sh:3:# Provides:          keyboard-setup.sh
/etc/init.d/keyboard-setup.sh:10:# Short-Description: Set the console keyboard layout
/etc/init.d/keyboard-setup.sh:11:# Description:       Set the console keyboard as early as possible
/etc/init.d/keyboard-setup.sh:38:       log_action_begin_msg "Setting up keyboard layout"
/etc/init.d/keyboard-setup.sh:39:            if /lib/console-setup/keyboard-setup.sh; then
/etc/init.d/keyboard-setup.sh:46:            echo 'Usage: /etc/init.d/keyboard-setup {start|reload|restart|force-reload|stop|status}'
/etc/console-setup/remap.inc:1:# The content of this file will be appended to the keyboard layout.

Plus lent:

$ find /etc -type f -and -readable -exec  grep -iHn keyboard {} \;
/etc/default/keyboard:1:# KEYBOARD CONFIGURATION FILE
/etc/default/keyboard:3:# Consult the keyboard(5) manual page.
/etc/init.d/keyboard-setup.sh:3:# Provides:          keyboard-setup.sh
/etc/init.d/keyboard-setup.sh:10:# Short-Description: Set the console keyboard layout
/etc/init.d/keyboard-setup.sh:11:# Description:       Set the console keyboard as early as possible
/etc/init.d/keyboard-setup.sh:38:       log_action_begin_msg "Setting up keyboard layout"
/etc/init.d/keyboard-setup.sh:39:            if /lib/console-setup/keyboard-setup.sh; then
/etc/init.d/keyboard-setup.sh:46:            echo 'Usage: /etc/init.d/keyboard-setup {start|reload|restart|force-reload|stop|status}'
/etc/console-setup/remap.inc:1:# The content of this file will be appended to the keyboard layout.
find: ‘/etc/ssl/private’: Permission denied

Tout ceci est très différent de:

find /etc -type f -and -readable | grep -iHn keyboard