LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (http://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   Using " find " with " -regex " Some help needed..!! (http://www.linuxquestions.org/questions/linux-newbie-8/using-find-with-regex-some-help-needed-837444/)

WhisperiN 10-11-2010 12:49 PM

Using " find " with " -regex " Some help needed..!!
 
Hello dears,
How you doing all ?

Alright, here is what I need help with.
I'm writing a shell script that takes care of some regular tasks.

In this shell script, I use " find " to search for files that meet some name criteria using the -regex.

The problem is, I've tried til I got sick of it..
Googled, and "man find" .. with no hope.

Simply, what I need that regular expression to do, is to bring me file names that:
  • Start with some-prefix
  • Ends with one of several extensions (jpg or gif or png)

I've tried so many regexes, but I couldn't get it yet..!!

ANY help, would be more thank welcomed..
Deep Regards..
- Hasan

TB0ne 10-11-2010 01:20 PM

Quote:

Originally Posted by WhisperiN (Post 4124131)
Hello dears, How you doing all ?
Alright, here is what I need help with. I'm writing a shell script that takes care of some regular tasks.

In this shell script, I use " find " to search for files that meet some name criteria using the -regex.

The problem is, I've tried til I got sick of it..Googled, and "man find" .. with no hope. Simply, what I need that regular expression to do, is to bring me file names that:
  • Start with some-prefix
  • Ends with one of several extensions (jpg or gif or png)

I've tried so many regexes, but I couldn't get it yet..!!

Ok..since you've tried so many things, how about posting one or two of them, to show us what you've tried???

Did you read the man pages on find, or any of the many tutorials on regex'es?? This might work: "find ./ -type f -iname *[.jpg][.png]"

jcmlq 10-11-2010 01:23 PM

The big change between shell name expansion and regex matching is that the directory becomes part of the match, which is almost never what you actually want imo.

Code:

find . -regextype posix-egrep -iregex ".*/prefix.*(gif|png|jpg)$"
BTW, the better answer to this imo is to stick with basic find functionality

Code:

find . \( -iname "prefix*.gif" -o -iname "prefix*.png" -o -iname "prefix*.jpg" \) -print

WhisperiN 10-11-2010 02:24 PM

Quote:

Originally Posted by TB0ne (Post 4124160)
Ok..since you've tried so many things, how about posting one or two of them, to show us what you've tried???

Did you read the man pages on find, or any of the many tutorials on regex'es?? This might work: "find ./ -type f -iname *[.jpg][.png]"

Hello Tbone,

Well, one of the many ones I used is:
find . -regex ".*/prefix.*(png|gif|jpg)$"

But, they never brought the right results..
But jcmlq Solved it..!!

Thanks for your response..

WhisperiN 10-11-2010 02:51 PM

Quote:

Originally Posted by jcmlq (Post 4124164)
The big change between shell name expansion and regex matching is that the directory becomes part of the match, which is almost never what you actually want imo.

Code:

find . -regextype posix-egrep -iregex ".*/prefix.*(gif|png|jpg)$"
BTW, the better answer to this imo is to stick with basic find functionality

Code:

find . \( -iname "prefix*.gif" -o -iname "prefix*.png" -o -iname "prefix*.jpg" \) -print

Oh man.. Great..!!
You really rock :D

I was too sure that there is something missing..
It was the ( -regextype posix-egrep ).

Alright, and for your other suggestion..
I guess it would also bring the desired results.. But I see the first one is easier to modify later. Add to that that I need to use the ( -atime +days ) with find.

If you don't mind make this topic someway richer with info..
From the find man pages, I went out that -regextype has emacs (this is the default), posix-awk, posix-basic, posix-egrep and posix-extended.

If you can let us know the differences between them..
That would be a GREAT favor to me and readers.

Also, the reason you prefer to stick with the second suggestion you made earlier.

Again, I do really appreciate your help..!!

- Hasan

Tinkster 10-11-2010 03:00 PM

Quote:

Originally Posted by WhisperiN (Post 4124240)
From the find man pages, I went out that -regextype has emacs (this is the default), posix-awk, posix-basic, posix-egrep and posix-extended.

O'Reilly - Mastering regular expressions



Cheers,
Tink

jcmlq 10-11-2010 03:30 PM

The reason I prefer the second suggestion is portability. gnu extensions are sometimes really wonderful, but I deal with bsd and solaris on a regular basis too, so I tend to be a bit wary of depending on gnu extensions too much.

The gnu 'info' pages often have the details about the extensions.

http://www.gnu.org/software/findutil...ar-Expressions


All times are GMT -5. The time now is 11:58 PM.