Using a single "find" cmd to search for multiple file types and output individual files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using a single "find" cmd to search for multiple file types and output individual files
# 1  
Old 07-02-2013
Using a single "find" cmd to search for multiple file types and output individual files

Hi All,

I am new here but I have a scripting question that I can't seem to figure out with the "find" cmd.

What I am trying to do is to only have to run a single find cmd parsing the directories and output the different file types to induvidual files and I have been running into problems. Below is my code:

Code:
find $ROOTDIR  \(-type f -links +1 -exec ls -liad {} \; > $BASEDIR/$OUTDIR/hardlink$EXT 2>> $ERRFILE \), \
  \(-type l -ls > $BASEDIR/$OUTDIR/symlink$EXT 2>> $ERRFILE \), \
  \(-type b > $BASEDIR/$OUTDIR/blockdev$EXT 2>> $ERRFILE \), \
  \(-type s > $BASEDIR/$OUTDIR/sock$EXT 2>> $ERRFILE \), \
  \(-type D > $BASEDIR/$OUTDIR/door$EXT 2>> $ERRFILE \), \
  \(-type p > $BASEDIR/$OUTDIR/pipe$EXT 2>> $ERRFILE \), \
  \(-type c > $BASEDIR/$OUTDIR/chardev$EXT 2>> $ERRFILE \)

When this is run I get the output:

Quote:
find: bad option ),
find: [-H | -L] path-list predicate-list
Any help is appreciated!

Thanks
# 2  
Old 07-02-2013
It means what it says, ), is not valid.

Everywhere you have ), try ) instead.
# 3  
Old 07-02-2013
find doesn't recognize ), as a predicate so it's treating it as an option, an option it does not understand. Remove the comma and \) will properly match the opening \(.

All of those redirections are handled by the shell before find is invoked. find will not see any of them and since they all clobber each other, all stdout will go to chardev$EXT.

Further, even if the redirections weren't an issue, you would need one -exec per -type.

You could use find only for finding files with more than one hardlink, piping its output into a while-read loop which uses sh to write to the appropriate file.

Alternatively, you can add an -exec for each -type, but each -exec will need to run a small shell script to redirect output to the target file. There is no other way to redirect the streams of individual -exec's because -exec does not use a shell to parse its arguments.

Regards,
Alister

Last edited by alister; 07-02-2013 at 12:30 PM..
# 4  
Old 07-02-2013
Ok, awesome. That explains the results and I assumed that it was something like that but didn't understand how the find expressions were used.

Will let you know what I end up using.

Thanks again
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How do I redirect output from "find", either to a file or another command?

I'm trying to find out what happened to the rogue game that apt-get told me it installed, so I thought I would find the file. I went to the root and entered: find -name "rog*.*" I get a large number of lines saying my access is denied in various directories. I figure I'll practice my Unix... (14 Replies)
Discussion started by: arghvark
14 Replies

2. Shell Programming and Scripting

find files in sub dir with tag & add "." at the beginning [tag -f "Note" . | xargs -0 {} mv {} .{}]

I am trying find files in sub dir with certain tags using tag command, and add the period to the beginning. I can't use chflags hidden {} cause it doesn't add period to the beginning of the string for web purpose. So far with my knowledge, I only know mdfind or tag can be used to search files with... (6 Replies)
Discussion started by: Nexeu
6 Replies

3. Shell Programming and Scripting

Find out if multiple files have lines ending with"r"

I am trying to find out which files in a group of files have lines ending in r. What I have is this: cat /tmp/*RECORDS| if grep r$>/dev/null; then echo "yes";else echo"no";fi Records is more than one file. There are the following files TEST-RECORDS /volume/testing /volume/programs ... (2 Replies)
Discussion started by: newbie2010
2 Replies

4. Shell Programming and Scripting

How to pass multiple file types search pattern as argument to find?

How can I pass $var_find variable as argment to find command? test.sh var_find=' \( -name "*.xml" -o -name "*.jsp" \) ' echo "${var_find}" find . -type f ${var_find} -print # Below statement works fine.. I want to replace this with the above.. #find . \( -name "*.xml" -o -name... (4 Replies)
Discussion started by: kchinnam
4 Replies

5. Shell Programming and Scripting

"Join" or "Merge" more than 2 files into single output based on common key (column)

Hi All, I have working (Perl) code to combine 2 input files into a single output file using the join function that works to a point, but has the following limitations: 1. I am restrained to 2 input files only. 2. Only the "matched" fields are written out to the "matched" output file and... (1 Reply)
Discussion started by: Katabatic
1 Replies

6. UNIX for Dummies Questions & Answers

"find": search the a regex of FILES??

I want to use the find command to search a ton of files, but I want to break it up into multiple machines. I want to search for files with "filename." in the title. The location I want to search is: /u/*/*/*/stuff On the first computer I want to search: /u//*/*/stuff Right now I am doing... (1 Reply)
Discussion started by: msf5042
1 Replies

7. Shell Programming and Scripting

passing the output of cmd from "eval" to a variable

Hello, I need help with the eval command. I have been building a lengthy cmd using eval, and I need to create $var from the output of the cmd. Here is what I have. Out=/dfezz1/output.txt Node="'LPAR Info:'" Gr3p0=" |grep" Printc=" prtconf" Output1=" 1>>$Out 0>&1" Cat1="cat... (8 Replies)
Discussion started by: dfezz1
8 Replies

8. Shell Programming and Scripting

assign shell var output of cmd "wc"

how do I feed output of "wc" to a shell script variable "countBcp"? (2 Replies)
Discussion started by: devy
2 Replies

9. Shell Programming and Scripting

"find command" to find the files in the current directories but not in the "subdir"

Dear friends, please tell me how to find the files which are existing in the current directory, but it sholud not search in the sub directories.. it is like this, current directory contains file1, file2, file3, dir1, dir2 and dir1 conatins file4, file5 and dir2 contains file6,... (9 Replies)
Discussion started by: swamymns
9 Replies

10. UNIX for Dummies Questions & Answers

finding multiple file types with "-o"

i was just wondering if any one had a good example of finding mutliple file types with the -o option or any other alternatives. find . \( -name "*.txt" -o -name "*.tag" \) for some reason i'm not having much luck and the man page isn't very descriptive. what i am trying to do is find all... (6 Replies)
Discussion started by: Shakey21
6 Replies
Login or Register to Ask a Question