Find help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find help
# 1  
Old 04-23-2008
Find help

i am trying to write ideally a one liner that will find all of the folders inside of a volume that don't contain a subfolder starting with the letter e and at the same time do contain a subfolder named 'images' that are not empty.

so far i have this
find /Volumes/image/ \! \( -name "e*" -and /images -empty

up to this point

find /Volumes/image/ \! \( -name "e*"

minus the ( of course i am pretty sure that it works to find directories inside of /Volumes/image/ that don't have subdirectories starting with e.


Again the desired output is.
Volumes/image/*/(no dirs starting with e) and at the same time /Volumes/image/*/images/(anything just not empty). Thats what i am trying to get.

Any help will be appreciated.

Thanks,
Movomito

Last edited by Movomito; 04-23-2008 at 11:09 AM..
# 2  
Old 04-23-2008
Quote:
Originally Posted by Movomito

Again the desired output is.
Volumes/image/*/(no dirs starting with e) and at the same time /Volumes/image/*/images/(anything just not empty). Thats what i am trying to get.

Any help will be appreciated.

Tested with GNU find:

Code:
find /Volumes/image/ -type d    \!  \(  -name "image*" -empty \)  \! -name "e*"


Last edited by rubin; 04-23-2008 at 12:01 PM.. Reason: replaced . with /Volumes/image/
# 3  
Old 04-23-2008
find /Volumes/image/ -type d \! \( -name "image*" -empty \) \! -name "e*"

this works great. Thank you. However, my output is a list of all of the directories and sub directories. Ideally i would get output that is a list of directories where this is true

so rather than this:

/Volumes/image/W00EGS1012593
/Volumes/image/W00EGS1012593/images
/Volumes/image/W00EGS1012593/images/W00EGS1012593-I00EGS1017114
/Volumes/image/W00EGS1016181
/Volumes/image/W00EGS1016181/images
/Volumes/image/W00EGS1016181/images/W00EGS1016181-I1PD10388
/Volumes/image/W00EGS1016199
/Volumes/image/W00EGS1016199/images
/Volumes/image/W00EGS1016199/images/W00EGS1016199-I00EGS1016201

i would just get:

/Volumes/image/W00EGS1012593
/Volumes/image/W00EGS1016181
/Volumes/image/W00EGS1016199

or even better:

/W00EGS1012593
/W00EGS1016181
/W00EGS1016199

thank you. Any help is appreciated
# 4  
Old 04-23-2008
Quote:
Originally Posted by Movomito
find /Volumes/image/ -type d \! \( -name "image*" -empty \) \! -name "e*"

this works great. Thank you. However, my output is a list of all of the directories and sub directories. Ideally i would get output that is a list of directories where this is true
...
or even better:

/W00EGS1012593
/W00EGS1016181
/W00EGS1016199

thank you. Any help is appreciated
If your find supports maxdepth then use the following code. Run it from current dir ( ie. /Volumes/image/ ) :

Code:
find . -maxdepth 1 -type d    \!  \(  -name "image*" -empty \)  \! -name "e*"

# 5  
Old 04-23-2008
the -maxdepth took care of cleaning up my output.

However, now i have noticed that the \! -name "e*" doesn't seem to be working.

While it is not outputting directories that start with e it is outputting directories that have subdirectories in them that start with e.

For example

./W00EGS1016928
./W00EGS1016928/images
./W00EGS1016928/images/W00EGS1016928-I01JW231

and ./W00EGS1016928/ebook/ does exist

almost there though

Thanks
# 6  
Old 04-23-2008
Using maxdepth find will not search in the subdirectories anymore, so back to the initial working code, by modifying it a little, you'd get the output described in your second post:

Quote:
Originally Posted by Movomito
....
so rather than this:

/Volumes/image/W00EGS1012593
/Volumes/image/W00EGS1012593/images
/Volumes/image/W00EGS1012593/images/W00EGS1012593-I00EGS1017114
/Volumes/image/W00EGS1016181
/Volumes/image/W00EGS1016181/images
/Volumes/image/W00EGS1016181/images/W00EGS1016181-I1PD10388
/Volumes/image/W00EGS1016199
/Volumes/image/W00EGS1016199/images
/Volumes/image/W00EGS1016199/images/W00EGS1016199-I00EGS1016201

i would just get:
...
or even better:

/W00EGS1012593
/W00EGS1016181
/W00EGS1016199

...
Running it again from the current directory:

Code:
find . -type d    \!  \( -name "image*" -empty \)  \! -name "e*" | awk -F'/' '{a[$2]++; if ( a[$2]==1 ) print "/"$2}'

Hope this helps.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find string1, when true find string2 in reverse direction

Hello, This is a bit complicated for me. My scenario in MyFile: Search string1, When string1 is found, grep the line containing string1, go back over that line in upward direction and grep the first line containing string2. Here is an example: MyFile His email address... (17 Replies)
Discussion started by: baris35
17 Replies

2. Shell Programming and Scripting

How to find a file with a specific pattern for current sysdate & upon find email the details?

I need assistance with following requirement, I am new to Unix. I want to do the following task but stuck with file creation date(sysdate) Following is the requirement I need to create a script that will read the abc/xyz/klm folder and look for *.err files for that day’s date and then send an... (4 Replies)
Discussion started by: PreetArul
4 Replies

3. Shell Programming and Scripting

find: missing argument to `-exec' while redirecting using find in perl

Hi Friends, Please help me to sort out this problem, I am running this in centos o/s and whenever I run this script I am getting "find: missing argument to `-exec' " but when I run the same code in the command line I didn't find any problem. I am using perl script to run this ... (2 Replies)
Discussion started by: ramkumarselvam
2 Replies

4. Shell Programming and Scripting

How to use grep & find command to find references to a particular file

Hi all , I'm new to unix I have a checked project , there exists a file called xxx.config . now my task is to find all the files in the checked out project which references to this xxx.config file. how do i use grep or find command . (2 Replies)
Discussion started by: Gangam
2 Replies

5. Shell Programming and Scripting

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... (7 Replies)
Discussion started by: Sekullos
7 Replies

6. Linux

Simplified find command to find multiple file types

Hi, I'm using the following command to find the multiple requierd file types and its working fine find . -name "*.pl" -o -name "*.pm" -o -name "*.sql" -o -name "*.so" -o -name "*.sh" -o -name "*.java" -o -name "*.class" -o -name "*.jar" -o -name "*.gz" -o -name "*.Z" -type f Though... (2 Replies)
Discussion started by: vickramshetty
2 Replies

7. UNIX for Dummies Questions & Answers

how to find a file named vijay in a directory using find command

I need to find whether there is a file named vijay is there or not in folder named "opt" .I tried "ls *|grep vijay" but it showed permission problem. so i need to use find command (6 Replies)
Discussion started by: amirthraj_12
6 Replies

8. Shell Programming and Scripting

Little bit weired : Find files in UNIX w/o using find or where command

Yes , I have to find a file in unix without using any find or where commands.Any pointers for the same would be very helpful as i am beginner in shell scritping and need a solution for the same. Thanks in advance. Regards Jatin Jain (10 Replies)
Discussion started by: jatin.jain
10 Replies

9. Shell Programming and Scripting

command find returned bash: /usr/bin/find: Argument list too long

Hello, I create a file touch 1201093003 fichcomp and inside a repertory (which hava a lot of files) I want to list all files created before this file : find *.* \! -maxdepth 1 - newer fichcomp but this command returned bash: /usr/bin/find: Argument list too long but i make a filter all... (1 Reply)
Discussion started by: yacsil
1 Replies
Login or Register to Ask a Question