List files matching pattern when too many for bash globbing

DavidR picture DavidR · Jun 29, 2013 · Viewed 24k times · Source

I'd like to run the following:

ls /path/to/files/pattern*

and get

/path/to/files/pattern1 
/path/to/files/pattern2 
/path/to/files/pattern3

However, there are too many files matching the pattern in that directory, and I get

bash: /bin/ls: Argument list too long

What's a better way to do this? Maybe using the find command? I need to print out the full paths to the files.

Answer

jaypal singh picture jaypal singh · Jun 29, 2013

This is where find in combination with xargs will help.

find /path/to/files -name "pattern*" -print0 | xargs -0 ls

Note from comments: xargs will help if you wish to do with the list once you have obtained it from find. If you only intend to list the files, then find should suffice. However, if you wish to copy, delete or perform any action on the list, then using xargs instead of -exec will help.