10

Ok this is strange. I am using this code,

ls *.prj

To list all the files with the .prj extension in the dir but I am getting this error,

bash: /bin/ls: Argument list too long

I eventually wish to get the count of files and I was using,

ls *.prj | wc -l

But even this command is giving the same error. Any idea where I am going wrong?

Sam007
  • 4,653

3 Answers3

11

Use find command instead

 find . -name "*.prj"

You can also combine the commands with find

find . -name "*.prj" -exec COMMAND {} \;

Hope this helps.

devav2
  • 37,290
9

Nothing, there is a limit on the number of argument bash can deal with. Do

ls | grep '\.prj$' | wc -l
January
  • 37,208
3

Parsing the output of ls is unreliable. It will probably work in your case, but ls mangles unprintable characters. Here is a fully reliable way of counting the files matching a certain extension. This shell snippet creates an array containing the file names, then prints the number of elements in the array.

shopt -s nullglob
a=(*.prj)
echo ${#a[@]}