Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Not to mention that many of the examples given are very inefficient ways to do what's needed. Specifically, looking for files with "5" in the name:

    $ ls | grep -e .*5.*
Would be better as:

    $ find . -name '*5*'
or if you insist on using a regex:

    $ find . -regex '.*5.*'


Am I missing something? What's wrong with:

  $ ls *5*
??

The find command is more powerful (descending into subdirs, etc.), but the original example in the link only specified the current directory.


I have used production batch processing systems that routinely store enough files that

  ls *5*
will fail because the argument list was too big for execve(2). Would I design it that way? No, but people do (sometimes without really thinking about it), and you still have to get work done.

New users should be taught find(1) because it always works.


Right, I understand the problem. Find and xargs can do wonders. However, that's usually an edge case (in my professional experience). I'm certainly not proclaiming the advanced-ness of 'ls' in this circumstance.

However, in the example in the article, he was using "ls" piped to "grep" in order to find all files with a 5 in the name. That would suffer from the same consequences you mentioned, on such systems, and is inefficient and verbose.

Note, I agree with your advice to teach "find" (and "xargs") to users.


True,

  ls | grep 5
is reliable where

  ls *5*
is not. (Well, except for awful names that require "find -print0", or preferably having the file taken out and shot along with its creator.)

I'm actually not a fan of xargs. It's more unixy, but somehow I find its options hard to remember. Off the top of my head I find it easier to do

  find -exec blah {} +


Sorry, I got so caught up the frustration that I forget to post that as my real frustration. :P That was exactly what I first thought when I saw that, and was posting the `find` calls as just a easier / more comprehensive method of looking, esp when you start wanting recursive searches. The fact that you can add tons of different search filters to `find` that you can't have with `ls` really make it the goto way of finding files, rather than piping ls to some form of grep or whatnot.


    $ ls -d *5*
Otherwise you get a listing of any directory with a 5 in the name.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: