Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
The "Argument list too long" Error in Linux Commands
The "Argument list too long" error occurs when a Linux command receives more arguments than the system can handle. This happens when shell glob expansion (like *) expands to thousands of filenames, exceeding the kernel's argument buffer limit defined by ARG_MAX.
What Causes the Error?
When you use wildcards like *, the shell expands them into individual filenames before passing them to the command. If a directory contains many files, this expansion can exceed system limits.
$ ls -lrt | wc -l 230086 $ ls -lrt events* | wc -l -bash: /usr/bin/ls: Argument list too long
The command ls events* tries to expand to all 230,000+ filenames, but the kernel cannot handle such a large argument list.
Understanding System Limits
You can check your system's argument limit using:
$ getconf ARG_MAX 2097152
For more detailed limits, use xargs:
$ xargs --show-limits Your environment variables take up 2504 bytes POSIX upper limit on argument length (this system): 2092600 Maximum length of command we could actually use: 2090096
The actual available space is ARG_MAX minus the size of environment variables.
Solutions
Using the find Command
The most robust solution uses find with xargs to process files in manageable batches:
$ find . -name "events*" | xargs ls -lrt | wc -l 230085 $ find . -name "events*.log" -delete
The find command processes files one at a time, avoiding argument expansion entirely.
Using for Loop
A shell loop processes files individually without expanding all arguments at once:
$ for f in events*; do echo "$f"; done | wc -l 230085 $ for f in events*.log; do rm "$f"; done
Manual Pattern Splitting
Split the pattern into smaller groups that stay within limits:
$ ls -lrt events1*.log | wc -l 31154 $ ls -lrt events2*.log | wc -l 15941
Directory Removal Method
When removing all files from a directory, delete and recreate the directory:
$ rm -rf /path/to/directory $ mkdir /path/to/directory
Note: This approach removes original directory permissions and ownership.
Comparison of Solutions
| Method | Speed | Memory Usage | Preserves Permissions |
|---|---|---|---|
| find + xargs | Fast | Low | Yes |
| for loop | Slow | Low | Yes |
| Manual split | Medium | Medium | Yes |
| Directory removal | Very fast | Low | No |
Conclusion
The "Argument list too long" error occurs when shell expansion exceeds system limits. The best solution is using find with xargs for robust file processing. Alternative approaches like for loops or pattern splitting work well for specific scenarios while avoiding argument expansion altogether.
