Find wild card directory and its files of some extensions


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Find wild card directory and its files of some extensions
# 1  
Old 08-18-2017
Find wild card directory and its files of some extensions

I want to use Find command to find directories that have certain name and them find files in that directory having only some extensions. So far, I have come up with this command to list directories with wild card name and list ALL the files in that directory.

Code:
find . -type d -name prog\* -print -exec ls -la {} \;

This command finds directories that start with "prog", prints the name of the directory and lists all files in that directory.

I want to limit the listing of files to certain extensions, say .txt and .prg.

How can I accomplish that without making it too complicated. Any help will be greatly appreciated.

Thanks in advance for the help.
Subhash.
# 2  
Old 08-18-2017
If your find version allows for it, try
Code:
find . -path ./prog\* \( -iname "*.txt" -o -iname "*.prg" \)

# 3  
Old 08-18-2017
Tried that. My Find does not support "path".

Code:
>find . -path ./prog\* \( -iname "*.txt" -o -iname "*.prg" \)
find: bad option -path
find: [-H | -L] path-list predicate-list


Moderator's Comments:
Mod Comment Please use CODE tags as required by forum rules!

Last edited by RudiC; 08-18-2017 at 03:10 PM.. Reason: Added CODE tags.
# 4  
Old 08-19-2017
Note that if you would tell us what operating system and shell you're using when you start your threads, we could all save time by not posting suggestions that cannot work in your environment...

Assuming that you are only looking for .txt and .prg files in directories with names that match the pattern file* (not all files with those extensions is the file hierarchies rooted in those directories) and that at least one directory in the file hierarchy rooted in your current working directory matches that pattern, you could try:
Code:
for dir in $(find . -type d -name 'file*')
do	ls -l "$dir"/*.txt "$dir"/*.prg "$dir"/.*.txt "$dir"/.*.prg 2>/dev/null
done

# 5  
Old 08-21-2017
Noted Don. I will provide OS/Shell for any future posts. For now, I am using SunOS unix 5.10 Generic_150400-30 and shell is K Shell.

Your suggested code appears to be for use in a script file. Although I would prefer a one line command but I tried it anyway from the command line with "\;" after each line. It goes back to ">" prompt expecting some input.

I played around a little more with my original command and the following seems to have worked for me.

Code:
find . -type d -name prog\* -print -exec ls -la {} \; | /usr/xpg4/bin/grep -Ei '/|\.txt|\.PRG'

Please have a look and let me know if you see any potential problem with this.

Thanks.
Subhash.


Moderator's Comments:
Mod Comment Please use CODE tags as required by forum rules!

Last edited by RudiC; 08-21-2017 at 02:39 PM.. Reason: Changed QUOTE to CODE tags.
# 6  
Old 08-21-2017
The code I suggested in post #4 in this thread can be typed directly into ksh at any primary prompt or put into a file and use ksh to execute that file. No \; is required under any circumstances for the for loop I suggested. You could join the 3 lines into a single line if you put just a ; at the end of the 1st 2 lines; but I MUCH prefer to see the structure any of code I'm running instead of trying to cram it all into a single unreadable line. I did have a typo in the first line:
Code:
for dir in $(find . -type d -name 'file*')

should have been:
Code:
for dir in $(find . -type d -name 'prog*')

but that would cause a different (possibly empty) set of directories to be searched; it shouldn't cause a secondary prompt to be issued.

Unless you added or removed some quotes, there is no reason why the code I suggested would issue a secondary prompt waiting for further input. Please show us EXACTLY (in CODE tags) what you typed into ksh.

For the code you asked about:
Code:
find . -type d -name prog\* -print -exec ls -la {} \; | /usr/xpg4/bin/grep -Ei '/|\.txt|\.PRG'

what are you hoping to match with the first of the three alternatives in the ERE you're passing to grep?
# 7  
Old 08-22-2017
Thanks Don for the reply.

If I put just a ; after the first 2 lines, then it works like a charm. Here is my final version of the command:

Code:
for dir in $(find . -type d -name 'pro*'); do ls -l "$dir"/*.txt "$dir"/*.prg "$dir"/.*.txt "$dir"/.*.prg; done

May I ask what is the difference between "$dir"/*.txt and "$dir"/.*.txt in the ls command above ?

To answer your question
Quote:
what are you hoping to match with the first of the three alternatives in the ERE you're passing to grep?
the / in the first parameter will list the directory in which the files were found or where no matching files were found. Without the /, I get a long list of matched filenames without knowing which directory they reside in. To make this work, I had to use -print option in the find command.

Thanks
Subhash

Last edited by sssccc; 08-22-2017 at 04:15 PM.. Reason: Re-pharasing
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find the directories and deleting with wild card

Hi Firends, I have requirement like find the directories in unix after my my deployment is done. generally my requirement as follows. /data/common/scripts is folder and it has multiple scripts in this path. I have taken the back up of scripts folder as below /data/common/0816_scripts... (4 Replies)
Discussion started by: victory
4 Replies

2. Shell Programming and Scripting

Wild card for dir path

I have dir structure like this : /opt/oracle/product/abc/sqlplus/admin/ /opt/oracle/product/def/sqlplus/admin /opt/oracle/product/ghi/sqlplus/admin I am trying to use wildcard ( for dirs abc,def,ghi) ..something like this : cp xyz.txt ... (1 Reply)
Discussion started by: talashil
1 Replies

3. UNIX for Dummies Questions & Answers

Unable to find files using wild card search

Hi All, My server is AIX and i am trying to search for a file in a specific path in directory. The file name can be of two types: Position_20131114.csv Position123333_20131114.csv I am trying to assign a SOURCEFILE variable as mentioned below:, but i am unable to find/locate the files... (2 Replies)
Discussion started by: abhi_123
2 Replies

4. Shell Programming and Scripting

list files not matching wild card

Hi I need a unix command which generates the list of files that dont match the wild card pattern in the current directory say for example I have files like x.addfd.txt.H2012.txt x.addfd.txt.H2012.txt x.asegfd.txt.H2012.txt adfd.bagddf I need the list of files which dont match... (4 Replies)
Discussion started by: lijjumathew
4 Replies

5. Shell Programming and Scripting

find with wild card [solved]

Can somebody help me with the following syntax? I want to find all files that end with *.arc SUFFIX=".arc" find /tmp -name "\*$SUFFIX" -print 2>/dev/null ---------- Post updated at 03:45 PM ---------- Previous update was at 03:41 PM ---------- got it thanks -name... (0 Replies)
Discussion started by: BeefStu
0 Replies

6. Shell Programming and Scripting

Find Existence of File with wild card using Csh

Hi All, I would like to find out the existence of files with wild card using CSH. I have used the below code but does not seem to work. Can any expert give me some advice ? set nonomatch set pattern = "_xxx" set filetype = ( *$pattern* ) if ( -e $filetype) then echo... (2 Replies)
Discussion started by: Raynon
2 Replies

7. AIX

df, grep, wild card

Hi, I want to monitor my filesystem capacity and I want to df with grep wildcard for all 9*%. Is this possible? I want to replaced all the existing complicated scripts I have in the system. Thanks, Itik (2 Replies)
Discussion started by: itik
2 Replies

8. Shell Programming and Scripting

Wild card in find perm

Hi, Is there a way to use find command to list the directories for certain permissions. I know we can use find . -type d -perm nnn, where nnn is the permission number . However I wold like to know if I wanna search for wild card permissions i.e 75* / 7* / 55* , as i do not know the actual... (1 Reply)
Discussion started by: braindrain
1 Replies

9. UNIX for Dummies Questions & Answers

ls and wild card - Should be simple!

I am trying to cp files that have F0 as prefix in their name in path p1/p2 to path p3/p4 this command does not work - Why? (I am using HP/UX) cp p1/p2/F0* p3/p4 thanks. (2 Replies)
Discussion started by: GNMIKE
2 Replies

10. UNIX for Dummies Questions & Answers

using if with wild card patterns

Hi, Please help me. Suppose I have a file which contains files like: My file :/tmp/rooh_20020518.lst it consists: ASI00320225041925URD01 ASI00320225041925KER02 ASI00390228095244KER08 ... (1 Reply)
Discussion started by: rooh
1 Replies
Login or Register to Ask a Question