Parallel xargs over null-delimited input

Run N parallel jobs safely with NUL separators for names with spaces

find . -name '*.log' -print0 | xargs -0 -P"$(nproc)" -n1 gzip

tool
bash12 commands
tags
bashperformance

More bash commands

  • curl -s "$url" | jq .data; echo "${PIPESTATUS[@]}"

    Inspect exit code of every pipe stage; $? only reports the last command

  • while getopts "n:v" o; do case $o in n) ns=$OPTARG;; v) verbose=1;; esac; done

    POSIX option parsing with arguments; -n takes a value, -v is a switch

  • timeout -k 5s 30s ./long_task.sh || echo "timed out: $?"

    SIGTERM at 30s then SIGKILL after 5s grace; exit 124 means it was killed

  • exec 3>>audit.log; echo "$(date -Is) start" >&3; exec 3>&-

    Open fd 3 to a file, write to it independently of stdout, then close it

  • setopt extendedglob; print -l **/*(.); autoload zmv; zmv '(*).txt' '$1.bak'

    zsh: list only regular files recursively, then mass-rename safely with zmv

all 12 bash commands