I have a large number of files in directory - ~100k. I want to combine them and pipe them to standard output (I need that to upload them as one file elsewhere), but cat $(ls)
complains that -bash: /bin/cat: Argument list too long
. I know how to merge all those files into a temporary one, but can I just avoid it?
For a start, cat $(ls)
is not the right way to go about this - cat *
would be more appropriate. If the number of files is too high, you can use find
like this:
find -exec cat {} +
This combines results from find
and passes them as arguments to cat
, executing as many separate instances as needed. This behaves much in the same way as xargs
but doesn't require a separate process or the use of any non-standard features like -print0
, which is only supported in some versions of find
.
find
is recursive by default, so you can specify a -maxdepth 1
to prevent this if your version supports it. If there are other things in the directory, you can also filter by -type
(but I guess there aren't, based on your original attempt).