xargs Build commands from input
Light · Postcard
102 × 152 mm · PDF
Dark · Postcard
102 × 152 mm · PDF
Ink saver · Postcard
102 × 152 mm · PDF
Light · A4 landscape
297 × 210 mm · PDF
Dark · A4 landscape
297 × 210 mm · PDF
Ink saver · A4 landscape
297 × 210 mm · PDF
Light · A3 landscape
420 × 297 mm · PDF
Dark · A3 landscape
420 × 297 mm · PDF
Ink saver · A3 landscape
420 × 297 mm · PDF
Start here
<cmd> | xargs <cmd2>
find . -print0 | xargs -0 <cmd>
xargs -n 1 <cmd>
xargs -I {} <cmd> {}
xargs -P 4 -n 1 <cmd>
xargs -r <cmd>
xargs -t <cmd>
xargs -p <cmd>
Concepts
- Producer find, grep, git ls-files
- xargs split into items
- Command runs once per batch
- Exit status 0, 123, 124..127
Basics
<producer> | xargs <cmd>
xargs <cmd> < <file>
xargs -a <file> <cmd>
echo <a> <b> | xargs
xargs -n <n> <cmd>
xargs -L <n> <cmd>
xargs -s <bytes> <cmd>
xargs --show-limits
Splitting input
xargs -0 <cmd>
xargs -d '\n' <cmd>
xargs -d <char> <cmd>
xargs -E <str> <cmd>
xargs -e <cmd>
find <dir> -print0 | xargs -0 <cmd>
grep -rlZ <re> . | xargs -0 <cmd>
git ls-files -z | xargs -0 <cmd>
Placing arguments
xargs -I {} <cmd> {}
xargs -I % <cmd> %.bak
xargs -I {} sh -c '<script> "$1"' _
{}
xargs -n 1 sh -c '<script> "$1"'
_
xargs -I {} mv {} <dir>/{}
xargs sh -c '<cmd> "$@"
<extra>' _
Parallel and control
xargs -P <n> <cmd>
xargs -P 0 <cmd>
xargs -P $(nproc) -n 1 <cmd>
xargs --process-slot-var=<VAR> <cmd>
xargs -r <cmd>
xargs -t <cmd>
xargs -p <cmd>
xargs -x <cmd>
xargs -o <cmd>
Exit status
| Code | Meaning |
|---|---|
0 |
All runs succeeded |
123 |
Some run exited 1-125 |
124 |
A run exited 255; xargs stopped |
125 |
A run was killed by a signal |
126 |
Command found but not executable |
127 |
Command not found |
1 |
xargs itself failed |
Common uses
find . -name '*.log' -print0 | xargs -0 rm
find . -type f -print0 | xargs -0 grep -l <re>
ls | xargs -n 1 -P 4 <cmd>
xargs -n 1 < <file>
xargs < <file>
xargs -n 2 <cmd>
git branch --merged | xargs -r git branch -d
docker ps -q | xargs -r docker stop
cat <urls> | xargs -n 1 -P 8 curl -sO
xargs -a <file> -d '\n' -n 100
<cmd>
Recipes
find . -name '*.py' -print0 \ | xargs -0 -r sed -i 's/<old>/<new>/g'
find . -name '*.log' -print0 \ | xargs -0 -P 4 -n 1 gzip
find . -name '*.jpeg' -print0 \ | xargs -0 -I {} sh -c 'mv "$1" "${1%.jpeg}.jpg"' _ {}
... | xargs -t -p -n 1 <cmd># -p shows and asks; drop it once happy... | xargs -0 -r -n 1 -P 4 <cmd>



