Find, regular expression, anyway to simplify this find command?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find, regular expression, anyway to simplify this find command?
# 1  
Old 08-06-2011
Tools Find, regular expression, anyway to simplify this find command?

Hello everyone,
first post here, trying to learn scripting on my own and this forum as been really helpful so far. I made few little scripts working great but I m facing some problems with RE.

I have a bunch of files in many subdirectories called *001.ext *002.ext OR simple *.ext or *01.ext *02.ext And I want to use the find command to only show files *.ext or *01.ext or *001.ext without showing *101.ext *98.ext etc

So the output I want should only show files named like this :

./maindir/blabladir/blabla.ext
./maindir/BlaBLoBdir/BlaBLoBli.ext
./maindir/blablabliblou/blablabliblou.01.ext
./maindir/blabladir/blabla.01.ext
./maindir/blablablouboum/blablablouboum.001.ext

etc

I ve tried many ways for this but I only managed to get it working through the following painful command :

Code:
find . -iname '*.ext' ! -regex '.*0[2-9].ext' ! -regex '.*[1-9][0-9].ext' ! -regex '.*0[0-9][2-9].ext' ! -regex '.*1[0-9][0-9].ext'

Is there anyway to simplify this? I m not used to regular expressions but I m sure there must be a cleaner, simpler command for this. I tried to find answers on different websites about how regular expressions work but in this case it's giving me a headache Smilie

For now I m using this command to process my result through "find -exec" it works great but kinda restrictive. Idealy when I ll manage to, I ll export the result from find in a file (find blabla > test.txt) and then make a loop processing each line from test.txt and assign different variables to line 1, then execute a specific command and then process line 2 until there is no more lines to process.

But right now I just want to simplify this find command if anyone got better idea?

Thx
# 2  
Old 08-06-2011
I think you want this
Code:
find . -iname '*.ext' | egrep '[^0-9](001|01|[^0-9])\.ext$'

But you should understand
1) that *.ext matches every file with .ext extension and *01.ext matches *201.ext, etc.
2) that file globing and regular expressions are different things.
This User Gave Thanks to yazu For This Post:
# 3  
Old 08-06-2011
Awww yes, it seems to be working out perfectly thanks man

And yes I m aware of 1) I just didn't figure out a better way to do it. You make it look so simple now.
# 4  
Old 08-07-2011
Code:
find . -regex '.*[^0-9](0+1)?.ext'

# 5  
Old 08-07-2011
Problem with Yazu's solution is that i can't use -exec to my find command if I | egrep.
So I made it go through a | while read line loop but i noticed some files were missing aswell.

And binlib it's not working no Smilie

Gotta use globing if i want to be able to use -exec

I want to show any file called *.ext OR *part001.ext OR *part01.ext
and not show *part[0-9][2-9].txt AND NOT *part[0-9][0-9[2-9].ext

Kinda tricky Smilie
For now i got a shitty work arround => basicly processing some files manually
# 6  
Old 08-08-2011
I was experimenting different regexes and accidentally left out the escapes of the parentheses (or you can add -regextype with the type of your favorite regexes.)
Code:
find . -regex '.*[^0-9]\(0+1\)?.sql'

This will match b.ext, b01.ext, b001.ext and b0001.ext, etc. If you don't want to match beyond 001, then change to
Code:
find . -regex '.*[^0-9]\(00?1\)?.sql'

This User Gave Thanks to binlib For This Post:
# 7  
Old 08-09-2011
Mmmh it actualy worked for you?

Code:
find . -regex '.*[^0-9]\(0+1\)?.ext'

and
Code:
find . -regex '.*[^0-9]\(00?1\)?.ext'

gave me nothing
How do you check the default regextype? and what regextype is being used in your code?
I made many .ext files named randomly to test it out and no success but that's exactly what i need. gonna try arround to test arround if i can get it working.

Edit : Couldn't get it working. I m running this on my NAS which is limited to sh shell (and ash which I didn't really check out yet...) i tried to change regextype but it's not recognized.
Gonna try to install bash and other stuff.
Grumpf...

Last edited by Sekullos; 08-10-2011 at 01:30 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to find regular expression for two files?

I have files: sum_<INPUT FILENAME>.YYYYMMDDhhmmss.csv and sum_details_<INPUT FILENAME>.YYYYMMDDhhmmss.csv I have no idea, what is input filename, but in the code I would like to catch them in case I process them in the loop above case statement for *.${Today}.*.txt... (3 Replies)
Discussion started by: digioleg54
3 Replies

2. UNIX for Dummies Questions & Answers

How to using Regular expression to find file.?

Hi Gurus, I need to identify the file with below format: ABC20110101.DAT ABCD2011010103.DAT If I use ABC*\.DAT, it get two file. I want to get file after "ABC' then number, the ".DAT". I tried ABC* but it doesn't work. Thanks in advance. (9 Replies)
Discussion started by: ken6503
9 Replies

3. UNIX for Dummies Questions & Answers

find command: names matching the expression

Hello all, I need to print directories using find command. The directories names contain date in the format YYYYMMDD or the name of directory is only the date format. I want print directories, which doesn't start with this date. E.g I have dirs like foo20120101 foo20120101foo 20120101foo... (1 Reply)
Discussion started by: satin1321
1 Replies

4. Shell Programming and Scripting

How to find out whether a file exists with the help of regular expression?

Hi all I have a list of file names in array. But this file names are not exact. so i want to search whether a file exists or not using regular expression. code snippet: if ; then echo "File exists" else echo "File does not exits" fi over here "*EQST*" should be treated as a regular... (4 Replies)
Discussion started by: Ganesh_more
4 Replies

5. Shell Programming and Scripting

Regular Expression in Find command [KSH]

Hello, I am trying to use regex wtih find command in KSH. For some reason it is not working as expected. Input: comm_000_abc_0102.c comm_000_abc.c 456_000_abc_1212.cpp 456_000_abc_.cpp Expected Output: comm_000_abc_0102.c kkm_000_abc_8888.cpp (Basically I want to find all... (6 Replies)
Discussion started by: vinay4889
6 Replies

6. Shell Programming and Scripting

Find command - using regular expr

Hi, I would like to use find command to find file with a predefined extension for example find . modules/*.ksh *.lib I thought it's possible to use something like : find . modules/*. but it does not work. is there any other way? Thanks you (2 Replies)
Discussion started by: zam
2 Replies

7. Shell Programming and Scripting

Regular expression to find the length of a field

Hi, in the cobol copy books is there any regular expressions to be used in awk to fetch the length of each columns? below mentioned are the examples. Copy Book Sample 01 tablename. 02 group header. 03 col1 s9(10)V99. 03 Col2 s9(10)V9(3). 03 Col3 XXXX 02... (7 Replies)
Discussion started by: ahmedwaseem2000
7 Replies

8. Shell Programming and Scripting

Using grep and regular expression to find class references in a c++ file

I'm trying to math all class references in a C++ file using grep with regular expression. I'm trying to know if a specific include is usuless or not, so I have to know if there is a refence in cpp. I wrote this RE that searches for a reference from class ABCZ, but unfortunately it isn't working... (0 Replies)
Discussion started by: passerby
0 Replies

9. UNIX for Dummies Questions & Answers

grep regular expression to find = not ==

I suspect this is commonly done, but haven't found the right combination of search terms to find the answer. I want to grep for lines in .cpp files that contain only 1 '=' sign in an if statement. e.g., if (a = b) -- find this if (a==b) -- don't find this My attempt: egrep... (7 Replies)
Discussion started by: offkilter
7 Replies

10. UNIX for Dummies Questions & Answers

using regular expression for directories in find command

Hi, I want to find the files available in a directory /var/user/*/*/data/. I tried using the command "find /var/user/ -path '*/*/data/ -name '*' -type f" it says find: 0652-017 -path is not a valid option and then i tried using "find /var/user/ -name '*/*/data/*' -type f" but its not... (3 Replies)
Discussion started by: vinothbabu12
3 Replies
Login or Register to Ask a Question