Non Recursive Find Command


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Non Recursive Find Command
# 1  
Old 11-10-2012
Hammer & Screwdriver Non Recursive Find Command

Hello Unix Gurus,

I am using the following find commands:

1)
Code:
find Input_Path -name '*.[Pp][Dd][Ff]' -exec mv -f
{} Outputpath \;

2)
Code:
find Inputpath -name '*.[Pp][Dd][Ff]' -exec cp 
{} Outputpath \;

3)
Code:
find Somepath -name '*.[Pp][Dd][Ff]'

Now the problem is my Unix version does not support maxdepth Option for find command and i do not want the find commnand in each of the above cases to do a recursive processing instead it should only process files in Inputpath/Somepath Directory but not their subdirectories. Also i have large number of files to process . How can i accomplish this using the find command?

Thanks,

Moderator's Comments:
Mod Comment Please use code tags next time for your code and data.

Last edited by zaxxon; 11-10-2012 at 01:15 PM.. Reason: code tags, see PM
# 2  
Old 11-10-2012
try:
Code:
for f in Input_Path/*.[Pp][Dd][Ff]; do mv -f "$f" Outputpath; done
for f in Inputpath/*.[Pp][Dd][Ff]; do cp -f "$f" Outputpath; done
for f in Somepath/*.[Pp][Dd][Ff]; do ls -d "$f"; done

# 3  
Old 11-10-2012
You can use -prune option with find to skip sub directories:-
Code:
find Inputpath/* \( -type d ! -name . -prune \) -o \( -type f -name "*.[Pp][Dd][Ff]" -print \)

# 4  
Old 11-10-2012
Quote:
Originally Posted by pchegoor
Hello Unix Gurus,

I am using the following find commands:

1)
Code:
find Input_Path -name '*.[Pp][Dd][Ff]' -exec mv -f
{} Outputpath \;

2)
Code:
find Inputpath -name '*.[Pp][Dd][Ff]' -exec cp 
{} Outputpath \;

3)
Code:
find Somepath -name '*.[Pp][Dd][Ff]'

Now the problem is my Unix version does not support maxdepth Option for find command and i do not want the find commnand in each of the above cases to do a recursive processing instead it should only process files in Inputpath/Somepath Directory but not their subdirectories. Also i have large number of files to process . How can i accomplish this using the find command?

Thanks,

Moderator's Comments:
Mod Comment Please use code tags next time for your code and data.
Did you try using the suggestion I made in message #5 in the previous thread you had on this subject (Using UNIX Commands with Larger number of Files)?

Even though expanding Inputpath/*.[Pp][Dd][Ff] may exceed {ARG_MAX} on your system, the following replacements might work. The commands you listed in the previous thread were:
Code:
1)  mv -f Inputpath/*.[Pp][Dd][Ff] outputpath 
2)  cp Inputpath/*.[Pp][Dd][Ff] outputpath 
3)  rm -rf somepath/* 
4)  Find Inputpath/*.[Pp][Dd][Ff]

The following should be exact replacements except that any diagnostic messages in the first two commands about inaccessible files will not contain the leading Inputpath in displayed pathnames:
Code:
1)  cd Inputpath;mv -f *.[Pp][Dd][Ff] ../outputpath;cd - 
2)  cd Inputpath;cp *.[Pp][Dd][Ff] ../outputpath;cd - 
3)  rm -rf somepath || mkdir somepath
    Note, however, that this will remove .* files in somepath (if there
    are any) that would not be removed by somepath/*.
4)  cd Inputpath; printf "Inputpath/%s\n" *.[Pp][Dd][Ff];cd -

# 5  
Old 11-12-2012
Quote:
Originally Posted by bipinajith
You can use -prune option with find to skip sub directories:-
Code:
find Inputpath/* \( -type d ! -name . -prune \) -o \( -type f -name "*.[Pp][Dd][Ff]" -print \)

Unless a non-standard shell option is enabled (e.g. bash's dotglob), -name . is always false and pruning never occurs.

Regards,
Alister
This User Gave Thanks to alister For This Post:
# 6  
Old 11-12-2012
Quote:
Originally Posted by alister
Unless a non-standard shell option is enabled (e.g. bash's dotglob), -name . is always false and pruning never occurs.

Regards,
Alister
Hi Alister,
I don't think you noticed the ! in the command bipinajith posted:
Code:
find Inputpath/* \( -type d ! -name . -prune \) -o \( -type f -name "*.[Pp][Dd][Ff]" -print \)

For the given command the ! -name . is a no-op; all subdirectories not named "." will be pruned but "." won't appear in the list. But for the command:
Code:
find . \( -type d ! -name . -prune \) -o \( -type f -name "*.[Pp][Dd][Ff]" -print \)

it allows files in the current directory to be evaluated while pruning all subdirectories.
This User Gave Thanks to Don Cragun For This Post:
# 7  
Old 11-12-2012
Quote:
Originally Posted by Don Cragun
Hi Alister,
I don't think you noticed the ! in the command bipinajith posted
You are absolutely correct. I missed it completely. It's still a bug but my post needs to have its logic inverted: pruning always occurs.

Thank you for catching that, Don.

Regards,
Alister
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Help needed - find command for recursive search

Hi All I have a requirement to find the file that are most latest to be modified in each directory. Can somebody help with the command please? E.g of the problem. The directory A is having sub directory which are having subdirectory an so on. I need a command which will find the... (2 Replies)
Discussion started by: sudeep.id
2 Replies

2. UNIX for Dummies Questions & Answers

Recursive Find on file size

Is there a way to use the find command to recursively scan directories for files greater than 1Gb in size and print out the directory path and file name only? Thanks in advance. (6 Replies)
Discussion started by: jimbojames
6 Replies

3. UNIX for Dummies Questions & Answers

Some advice please on non-recursive find

Hi all, I am currently writing a find-and-remove kind of script that is to be used for Solaris and Linux. Currently am using the find command below that I is in find only current directory (universal) | commandlinefu.com This however gives me the "ksh: /bin/find: arg list too long" error... (6 Replies)
Discussion started by: newbie_01
6 Replies

4. UNIX for Advanced & Expert Users

Recursive directory search using ls instead of find

I was working on a shell script and found that the find command took too long, especially when I had to execute it multiple times. After some thought and research I came up with two functions. fileScan() filescan will cd into a directory and perform any operations you would like from within... (8 Replies)
Discussion started by: newreverie
8 Replies

5. Shell Programming and Scripting

Command to sort directories after a recursive find

find -type d -name "TC_*" | sort That's what I have so far... it finds the appropriate directories and then sorts them. But, when it comes to nested subdirectories, it only sorts relative to the first subdirectory. I want it to sort based on the directory at the end of the path. Does anyone know... (3 Replies)
Discussion started by: crimsondarkn
3 Replies

6. UNIX for Advanced & Expert Users

Non recursive find command

Hi, I have question is related to find command. I want to find command should search in current folder only not recursive mode(sub-folders). I found a one way of, find . \( -name success -prune \) -o -name "Rajini*" How ever, my current folder is having lots sub-folders and am not... (7 Replies)
Discussion started by: Nagapandi
7 Replies

7. Shell Programming and Scripting

Recursive find and store

I HAVE A TEXT FILE CONTAINING THE VALUES 1.CPP 2.CPP 3.CPP 4.CPP 5.CPP 6.CPP I WANT TO TAKE EACH .CPP AND USE THE FIND COMMAND TO FIND THE LATEST VERSION OF THE FOLDER IN WHICH IT IS PRESENT. HOW DO I IMPLEMENT IT IN A WHILE LOOP I TRIED SOMETHING LIKE THIS WHILE CAT... (3 Replies)
Discussion started by: ultimatix
3 Replies

8. UNIX for Dummies Questions & Answers

making a recursive find more useful..

Hi everyone, I'm using a recursive find (you know the type, find . -name qwert*) to find a set of files. However, because I'm new to the system and there is not much documentation about these particular files I'm trying to find them using this recursive find. I started off at the location... (3 Replies)
Discussion started by: spanish_tony
3 Replies

9. UNIX for Dummies Questions & Answers

Question: non-recursive find syntax

Hello, I am trying to search a directory for all files matching "G*" without looking in sub-directories "success" and "error". I've searched this forum and found the following syntax, but can't make it work: find . \( ! -name success -prune -name error -prune \) -type f -name "G*" Have... (6 Replies)
Discussion started by: alexkav
6 Replies

10. UNIX for Advanced & Expert Users

Performing a non-recursive find in Unix

I need to perform a non-recursive find in Unix. Sounds simple, but it doesn't actually work. The command ALWAYS searches through the subdirectories. Any ideas? I am on DEC Unix :-( (3 Replies)
Discussion started by: christallott
3 Replies
Login or Register to Ask a Question