Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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?

share|improve this question

3 Answers 3

up vote 0 down vote accepted

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

ls | grep '\.prj$' | wc -l
share|improve this answer
    
Yup that works great, that is what I wanted. Let this 15 min rule pass and I will select this as the right answer –  Sam007 Nov 15 '12 at 20:27

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.

a=(*.prj)
echo ${#a[@]}
share|improve this answer
    
ok I tried this and echo is giving me value 17 but the actual value is 90419, which is correctly calculated by the other two commands above –  Sam007 Nov 15 '12 at 21:46
2  
@Sam007 Sorry, that was an error in my command, I used zsh syntax that gives a different result in bash. ${#a} in zsh calculates the length of the array, but in bash it gives the length of the first element, and you need ${#a[@]} to get the number of elements. –  Gilles Nov 15 '12 at 21:50
    
Yup that is working –  Sam007 Nov 15 '12 at 22:00

Use find command instead

 find . -name "*.prj"

You can also combine the commands with find

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

Hope this helps.

share|improve this answer
    
that would be correct if all the files in the directory were having only .prj extn, but I have files with same names but different extensions and your commands lists all of them –  Sam007 Nov 15 '12 at 20:29
    
but by doing ls *.prj you are tyring to list the files with extn .prj right? –  devav2 Nov 15 '12 at 20:37
    
the answer is above –  Sam007 Nov 15 '12 at 20:44

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.