Home Learn Linux 10 xargs command examples for Linux power users

10 xargs command examples for Linux power users

Dive into the world of Linux command line tools with our comprehensive guide on mastering the xargs command. This article provides 10 practical examples to demonstrate the power and flexibility of xargs, making it an indispensable tool for efficient shell scripting and command line operations.

by John Horan
xargs command linux

Designed for those who love to streamline their workflows, xargs serves as a bridge, transforming output from one command into arguments for another, enabling seamless command chaining and data processing. Whether you’re a seasoned system administrator, a developer, or a Linux enthusiast, understanding xargs can open up new horizons of productivity and problem-solving.

From basic file operations to complex data manipulation, xargs stands as a testament to the flexibility and power of the Linux command line. So, let’s dive in and unlock the full potential of xargs through practical examples and insightful explanations.

Introduction to xargs

The xargs command in Linux is a true gem for processing and passing arguments from standard input to other commands. It’s a versatile utility that can turn lengthy or complex tasks into one-liners.

Syntax of xargs

The basic syntax of xargs is:

command | xargs [options] [command]

Here, command is the input source, and xargs processes this input to pass it to another command, which is optional.

1. Combining find and xargs for file deletion

Scenario: Deleting files with a specific extension.
Input:

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

Output:
This command doesn’t produce explicit output but silently deletes the files.

This command finds files in the current directory (and subdirectories) with the .tmp extension. The -print0 option of find prints the file names followed by a null character instead of the usual newline. This is particularly useful for handling files with spaces or unusual characters in their names. The xargs -0 command then reads these names and executes the rm command to delete them. The -0 option makes sure xargs correctly reads the null-terminated strings.

2. Archiving logs

Scenario: Compressing multiple log files.
Input:

find /var/log -type f -name "*.log" -print0 | xargs -0 tar -czvf logs.tar.gz

Output:

a /var/log/syslog.log
a /var/log/kern.log
...

Here, find is used to search /var/log for files (-type f) ending in .log. The resulting list is piped into xargs, which bundles these files into a single tar.gz archive. The -print0 and -0 options are used for safe handling of filenames with spaces or special characters.

3. Downloading multiple files

Scenario: Downloading a list of URLs.
Input:

cat urls.txt | xargs -n 1 wget

Output:

--2023-11-17 10:00:01--  http://example.com/file1.jpg
...

In this case, cat reads URLs from urls.txt and pipes them to xargs. The -n 1 option tells xargs to use one line (URL) at a time. Each URL is then passed to wget, which downloads the file.

4. Processing text files

Scenario: Counting the number of lines in text files.
Input:

ls *.txt | xargs wc -l

Output:

100 file1.txt
200 file2.txt
300 total

This one-liner lists all .txt files in the current directory and uses xargs to pass them to wc -l, which counts the lines in each file. It’s a quick way to get a line count of multiple text files simultaneously.

5. Bulk renaming files

Scenario: Renaming .html files to .php.
Input:

ls *.html | xargs -I {} mv {} {}.php

Output:
Files are renamed without explicit output.

ls lists all .html files and xargs processes each file one by one. The -I {} option defines {} as a placeholder for the filename. mv {} {}.php renames each file from filename.html to filename.html.php.

6. Creating directories

Scenario: Creating multiple directories.
Input:

echo "dir1 dir2 dir3" | xargs mkdir

Output:
Directories are created silently.

This command uses echo to pass directory names as a string to xargs, which in turn uses mkdir to create each directory. It’s a simple way to create multiple directories in one go.

7. Parallel execution

Input:

echo 1 2 3 4 5 | xargs -n 1 -P 5 bash script.sh

Output:
Depends on script.sh, but tasks are run in parallel.

This command passes numbers 1 through 5 to xargs, which runs script.sh for each number. The -P 5 option tells xargs to run up to 5 processes in parallel, speeding up the execution.

8. Conditional execution

Scenario: Deleting empty files.
Input:

find . -type f -empty | xargs rm

Output:
Empty files are deleted without explicit output.

The find command searches for empty files (-empty) in the current directory. These filenames are then piped to xargs, which runs rm to delete them.

9. Space handling in filenames

Scenario: Handling filenames with spaces.
Input:

find . -type f -print0 | xargs -0 stat 

Output:
Displays file statistics, correctly handling spaces in filenames.

This command is used to generate statistics for each file in the current directory, even if filenames contain spaces. find outputs null-terminated filenames, which xargs -0 correctly processes, ensuring accurate handling of each file.

10. Transforming output

Scenario: Converting multiple images.
Input:

ls *.png | xargs -n 1 -I {} convert {} {}.jpg

Output:
PNG files are converted to JPG format.

This command lists all .png files and converts each one to .jpg format using ImageMagick’s convert tool. The -I {} option is used to handle each file individually and append the .jpg extension to the output filename.

Xargs command usage summary

Primary Command Combination Primary Function
find . -name “*.tmp” -print0 | xargs -0 rm Delete files with a specific extension.
find /var/log -type f -name “*.log” -print0 | xargs -0 tar -czvf logs.tar.gz Archive multiple log files.
cat urls.txt | xargs -n 1 wget Download multiple files from a list of URLs.
ls *.txt | xargs wc -l Count the number of lines in multiple text files.
ls *.html | xargs -I {} mv {} {}.php Rename files from one extension to another.
echo “dir1 dir2 dir3” | xargs mkdir Create multiple directories.
echo 1 2 3 4 5 | xargs -n 1 -P 5 bash script.sh Run multiple instances of a script in parallel.
find . -type f -empty | xargs rm Delete empty files in a directory.
find . -type f -print0 | xargs -0 stat Generate file statistics, handling spaces in filenames.
ls *.png | xargs -n 1 -I {} convert {} {}.jpg Convert image files from one format to another.

Frequently Asked Questions (FAQs) about xargs in Linux

Here are some frequently asked questions about the xargs command:

1. What is the xargs command in Linux?

Answer: xargs is a command in Unix and Linux systems that reads items from the standard input, delimited by blanks (which can be protected with double or single quotes or a backslash) or newlines, and executes a specified command using the items as arguments.

2. Why is xargs useful in shell scripting?

Answer: xargs is incredibly useful for converting input from standard input into arguments to a command. It allows you to take output from one command and use it as input to another command, without needing to use temporary files.

3. How does xargs handle filenames with spaces?

Answer: By default, xargs doesn’t handle filenames with spaces well. However, you can overcome this by using the -print0 option in find and the -0 option in xargs. This makes both commands use a null character as a delimiter instead of spaces, allowing for correct handling of filenames with spaces.

4. Can xargs process arguments from a file?

Answer: Yes, xargs can process arguments listed in a file. You can use cat to pass the contents of the file to xargs, or use redirection. For example, xargs -a filename.txt command.

5. How can I limit the number of arguments passed to the command in xargs?

Answer: You can use the -n option followed by a number to limit the number of arguments passed to each invocation of the command. For example, xargs -n 2 echo will echo two arguments at a time.

6. Is it possible to run multiple commands in parallel using xargs?

Answer: Yes, the -P option followed by a number allows you to specify how many commands to run in parallel. For example, xargs -P 4 -n 1 command will run up to four instances of command in parallel.

7. How do I use a custom delimiter with xargs?

Answer: You can use the -d option followed by the delimiter character. For example, xargs -d ',' will use a comma as a delimiter.

8. Can xargs prompt before executing a command?

Answer: Yes, by using the -p or --interactive option, xargs will prompt the user for confirmation before executing each command.

9. How does xargs work with special characters in filenames?

Answer: Special characters in filenames can be a challenge for xargs. Using the -print0 option in find and -0 in xargs helps in correctly handling filenames with special characters, similar to handling spaces.

10. Is there a way to replace occurrences of the input within the command using xargs?

Answer: Yes, you can use the -I option followed by a replace-string (like {}). This replace-string will be replaced by each line of input in the command. For example, xargs -I {} mv {} {}.backup.

Conclusion

Throughout our exploration of the xargs command in Linux, we’ve seen its versatility and power in handling a wide range of tasks efficiently. From managing files and directories to manipulating text and executing commands in parallel, xargs proves to be an indispensable tool in the Linux command-line arsenal. The examples provided illustrate not only the basic usage but also some advanced techniques, including handling special characters and running commands in parallel. This makes xargs a valuable skill for anyone working in a Unix-like environment.

You may also like

Leave a Comment

fl_logo_v3_footer

ENHANCE YOUR LINUX EXPERIENCE.



FOSS Linux is a leading resource for Linux enthusiasts and professionals alike. With a focus on providing the best Linux tutorials, open-source apps, news, and reviews written by team of expert authors. FOSS Linux is the go-to source for all things Linux.

Whether you’re a beginner or an experienced user, FOSS Linux has something for everyone.

Follow Us

Subscribe

©2016-2023 FOSS LINUX

A PART OF VIBRANT LEAF MEDIA COMPANY.

ALL RIGHTS RESERVED.

“Linux” is the registered trademark by Linus Torvalds in the U.S. and other countries.