Home > Environment & Utility > xargs

xargs: Build and execute command lines from standard input

The xargs command reads items from standard input (stdin), delimited by blanks or newlines, and executes the command specified by the user with any initial arguments followed by items read from standard input. It is very useful for automating complex tasks such as converting multiple lines of input passed through a pipe (|) into arguments for a single command, or limiting the number of arguments that can be processed at once.

Overview

xargs reads data from standard input, interprets it as arguments separated by whitespace or newlines, and then passes these as arguments to the specified command for execution. It is particularly powerful when used with the find command, often employed to perform batch operations on lists of files.

Key Features

  • Converts standard input data into command arguments
  • Limits the number of arguments per command execution
  • Supports parallel processing
  • Safely handles filenames with special characters

Key Options

The main options for the xargs command are used to configure input processing methods, command execution control, and output formatting.

Input Processing

Execution Control

Generated command:

Try combining the commands.

Description:

`xargs` Executes the command.

Combine the above options to virtually execute commands with AI.

Usage Examples

xargs can be flexibly utilized in various scenarios. Here are some common usage examples.

Basic Usage: Deleting Multiple Files

echo "file1.txt file2.txt" | xargs rm

Deletes files by passing filenames received from standard input as arguments to the rm command.

Safely Deleting Files with find

find . -name "*.bak" -print0 | xargs -0 rm

Safely deletes files, even those with spaces or special characters in their names, by using the find -print0 and xargs -0 combination.

Executing Command for Each File (Replacement String)

find . -name "*.log" | xargs -I {} mv {} {}.old

Renames each .log file found by find to have a .old extension by executing the mv command.

Connecting to Multiple Hosts in Parallel via SSH

cat hostnames.txt | xargs -P 5 -I {} ssh {} "uptime"

Checks the uptime of each host listed in hostnames.txt by attempting up to 5 SSH connections concurrently.

Prompt Before Execution

ls *.tmp | xargs -p rm

Prompts for confirmation before deleting each .tmp file in the current directory.

Tips & Precautions

Tips and points to be aware of for effective use of xargs.

Safe Filename Handling

Since filenames can contain special characters like spaces, tabs, newlines, and quotes, always use the `find ... -print0 | xargs -0 ...` combination when working with the find command. This prevents issues by delimiting items with null characters.

  • Always use `find -print0` with `xargs -0`
  • By default, items are space-delimited, which can cause problems if filenames contain spaces

Caution with Dangerous Commands

Exercise extreme caution when using xargs with commands that modify the system, such as rm, mv, or chown. It is advisable to use the `-p` option for confirmation before each execution or the `-t` option to preview the commands to be executed.

  • Use `-p` (prompt) option for confirmation before execution
  • Use `-t` (trace) option to view commands before execution
  • Test with `echo` first to ensure commands behave as expected

xargs vs. for loop

While shell for loops can be more intuitive for simple tasks, xargs is a more efficient and powerful alternative when dealing with a very large number of files/items, requiring parallel processing, or exceeding command-line length limits.

  • Processing large numbers of files: `xargs` is more memory-efficient
  • Parallel processing: `xargs -P`
  • Command-line length limits: `xargs` automatically handles splitting

Same category commands