DEV Community

Cover image for How to use xargs on Linux
pikoTutorial
pikoTutorial

Posted on • Originally published at pikotutorial.com

How to use xargs on Linux

Welcome to the next pikoTutorial !

xargs reads items from standard input, delimited by blanks or newlines and executes the specified command with those items as arguments.

Basic usage

The most basic pattern of using xargs commands consists of 4 elements:

  • first command which generates some output
  • pipe operator
  • xargs
  • second command which consumes as an input the output from the first command
first_command | xargs second_command
Enter fullscreen mode Exit fullscreen mode

Examples

Create files basing on a text file

Let's assume you have the following list.txt text file:

file1.txt
file2.cpp
file3.py
Enter fullscreen mode Exit fullscreen mode

You can quickly create these files basing directly on that file by combining cat with touch with help of xargs:

cat list.txt | xargs touch
Enter fullscreen mode Exit fullscreen mode

In this case each file name listed in the file becomes an input argument for touch command. If you have large amount of data to process, you can add -P option which allows to specify the number of processes to run:

cat list.txt | xargs -P 8 touch
Enter fullscreen mode Exit fullscreen mode

Concatenate content of multiple files

If you want to find all the .txt files and merge them into one combined.txt file, run:

find -name "*.txt" | xargs cat > combined.txt
Enter fullscreen mode Exit fullscreen mode

Note for beginners: if you have files with spaces or special characters in their names, this simple version of the command will fail. To avoid this issue, you must use xargs with -0 option like this: find . -name "*.txt" -print0 | xargs -0 cat > combined.txt.

Combine multiple commands with subshell

If you want to execute multiple commands on a single item, just use sh command. Inside the shell you can access the item value using curly braces {}.

cat combined.txt | xargs -I "{}" sh -c 'echo Started processing "{}"; echo Processing...; echo Processed "{}"'
Enter fullscreen mode Exit fullscreen mode

Note for advanced: use quotes arround curly brackets to avoid e.g. command injection because by default the input is not sanitized in any way.

Archiving multiple files

To archive all the .csv files, run:

find -name "*.csv" | xargs tar -cvf archive.tar
Enter fullscreen mode Exit fullscreen mode

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs