LinuxQuestions.org
Latest LQ Deal: Latest LQ Deals
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie
User Name
Password
Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question? If it is not in the man pages or the how-to's this is the place!

Notices


Reply
  Search this Thread
Old 10-11-2010, 12:49 PM   #1
WhisperiN
Member
 
Registered: Jun 2009
Location: Middle East
Distribution: Slackware 13.1, CentOS 5.5
Posts: 137

Rep: Reputation: 17
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
 
Old 10-11-2010, 01:20 PM   #2
TB0ne
LQ Guru
 
Registered: Jul 2003
Location: Birmingham, Alabama
Distribution: SuSE, RedHat, Slack,CentOS
Posts: 26,705

Rep: Reputation: 7972Reputation: 7972Reputation: 7972Reputation: 7972Reputation: 7972Reputation: 7972Reputation: 7972Reputation: 7972Reputation: 7972Reputation: 7972Reputation: 7972
Quote:
Originally Posted by WhisperiN View Post
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]"
 
Old 10-11-2010, 01:23 PM   #3
jcmlq
Member
 
Registered: Aug 2009
Posts: 32

Rep: Reputation: 19
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

Last edited by jcmlq; 10-11-2010 at 01:49 PM. Reason: added note re -o
 
1 members found this post helpful.
Old 10-11-2010, 02:24 PM   #4
WhisperiN
Member
 
Registered: Jun 2009
Location: Middle East
Distribution: Slackware 13.1, CentOS 5.5
Posts: 137

Original Poster
Rep: Reputation: 17
Quote:
Originally Posted by TB0ne View Post
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..
 
Old 10-11-2010, 02:51 PM   #5
WhisperiN
Member
 
Registered: Jun 2009
Location: Middle East
Distribution: Slackware 13.1, CentOS 5.5
Posts: 137

Original Poster
Rep: Reputation: 17
Quote:
Originally Posted by jcmlq View Post
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

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
 
Old 10-11-2010, 03:00 PM   #6
Tinkster
Moderator
 
Registered: Apr 2002
Location: earth
Distribution: slackware by choice, others too :} ... android.
Posts: 23,067
Blog Entries: 11

Rep: Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928
Quote:
Originally Posted by WhisperiN View Post
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
 
Old 10-11-2010, 03:30 PM   #7
jcmlq
Member
 
Registered: Aug 2009
Posts: 32

Rep: Reputation: 19
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
 
  


Reply

Tags
find, regexp



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
BASH:find out if volume "foo"/folder "goo" can be written to SilversleevesX Programming 2 08-28-2010 10:03 AM
A single regex to match anything with ".aac" or ".mp3" at the end ? lumix Linux - General 9 05-09-2008 01:11 AM
Standard commands give "-bash: open: command not found" even in "su -" and "su root" mibo12 Linux - General 4 11-11-2007 10:18 PM
LXer: Displaying "MyComputer", "Trash", "Network Servers" Icons On A GNOME Desktop LXer Syndicated Linux News 0 04-02-2007 08:31 AM
Can't install "glibmm" library. "configure" script can't find "sigc++-2.0&q kornerr Linux - General 4 05-10-2005 02:32 PM

LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie

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

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration