Unable to find files using wildcard on AIX.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Unable to find files using wildcard on AIX.
# 1  
Old 02-17-2020
Unable to find files using wildcard on AIX.

I wish to seach for files extensions .xml, .jsp followed by <whatever> charecters under directory custom while excluding folders "BACKUP" & "TMP"

Thus for a sample set like below:

Code:
/tmp/custom/moht.xml_tmp
/tmp/custom/raw/testxmlfile
/tmp/custom/raw/test.jsp
/tmp/custom/test.xml
/tmp/custom/BACKUP/test.xml.bkp
/tmp/custom/log/test.xml.bkp

Use the below command to create the sample test files on your server for testing purpose:

Code:
mkdir -p /tmp/custom/BACKUP; mkdir -p /tmp/custom/log; mkdir -p /tmp/custom/raw; touch /tmp/custom/moht.xml_tmp; touch /tmp/custom/raw/testxmlfile; touch /tmp/custom/test.xml; touch /tmp/custom/BACKUP/test.xml.bkp; touch /tmp/custom/log/test.xml.bkp; touch /tmp/custom/raw/test.jsp


My find should yeild only these two files as output:

Code:
/tmp/custom/moht.xml_tmp
/tmp/custom/log/test.xml.bkp


I tried the below command but it does not give me the desired output.

Code:
/opt/freeware/bin/find /tmp/custom -type f \( -name '*.xml*' -o -name '*.js*' -o -name '*.jsp*' \) | grep -v '/BACKUP/' | grep -v '/REJECTED/'

Current Output:
Code:
/tmp/custom/log/test.xml.bkp
/tmp/custom/moht.xml_tmp
/tmp/custom/test.xml

It yeilds files having extension exactly matching .xml .js and .jsp i.e /tmp/custom/test.xml which it should not.

I'm on AiX 6.1

Can you please suggest ?

Last edited by mohtashims; 02-17-2020 at 05:53 AM..
# 2  
Old 02-17-2020
Please post the output you are getting.

You post your sample input, your code, but you do not post your output (correct or not, error messages.... your output).

INPUT ---> YOUR CODE ---> OUTPUT

Please. It is not that hard to be complete when posting a question, this I promise you Smilie But it makes is easier for people in the community when you post this information.

Thanks.
# 3  
Old 02-17-2020
You should find files with at least one more char after the extension, then:


Code:
find /tmp/custom -type f \( -name '*.xml?*' -o -name '*.js?*' -o -name '*.jsp?*' \) | grep -v '/BACKUP/'
/tmp/custom/moht.xml_tmp
 /tmp/custom/log/test.xml.bkp

man bash:


Quote:
* Matches any string, including the null string. ...
? Matches any single character.

find uses shell metacharacters (`*', `?' or `[]' for example) (man find)

Last edited by Akshay Hegde; 02-17-2020 at 06:16 AM..
# 4  
Old 02-17-2020
Quote:
Originally Posted by Neo
Please post the output you are getting.

You post your sample input, your code, but you do not post your output (correct or not, error messages.... your output).

INPUT ---> YOUR CODE ---> OUTPUT

Please. It is not that hard to be complete when posting a question, this I promise you Smilie But it makes is easier for people in the community when you post this information.

Thanks.
@Neo Hi, Thank you for your inputs. I have updated the Original Post with the output.
# 5  
Old 02-17-2020
(@Neo, nothing was really missing. I was able to construct the output from the given input sample and the given code. And no error message.)

The * in shell glob and find glob means every - even zero - amount of characters, so have another ? that means one character.
Further, you can egrep -v '/BACKUP/|/REJECTED/' the unwanted files, but most efficient is to let find prune=skip these directories.
As a rule of thumb, have the pruned directories first and continue with -o=OR=OTHERWISE.
Code:
find /tmp/custom -type d \( -name "BACKUP" -o -name "REJECTED" \) -prune -o -type f \( -name '*.xml?*' -o -name "*.js?*" \) -print

You must explicitly print on the desired branch in order to not implicitly print on both branches.
Llast but not least, *.js?* covers *.jsp?* so the letter is not needed. (Perhaps you want -name "*.js?*" \! -name "*.jsp" or -name "*.js??*"?)

Last edited by MadeInGermany; 02-17-2020 at 05:52 AM.. Reason: The -prune was missing
# 6  
Old 02-17-2020
Quote:
Originally Posted by MadeInGermany
(@Neo, nothing was really missing. I was able to construct the output from the given input sample and the given code. And no error message.)
.
This is not an issue of "being able to construct the output" Anyone can construct the output with basic skills.

The point is that readers should not have to construct the output. OPs should post their output.

These are the rules.

Thanks.
# 7  
Old 02-17-2020
@MadeInGermany i tried the ?* but the problem is i get .jsp files in the output because of '*.js?*' when a .jsp should not be returned in the output when i have -o -name '*.js?*'

Code:
/opt/freeware/bin/find /tmp/custom -type f \( -name '*.xml?*' -o -name '*.js?*' -o -name '*.jsp?*' \) | grep -v '/BACKUP/' | grep -v '/REJECTED/'

Output:
Code:
/tmp/custom/raw/test.jsp
/tmp/custom/log/test.xml.bkp
/tmp/custom/moht.xml_tmp

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Unable to grep using wildcard in a file.

I wish to check if my file has a line that does not start with '#' and has 1. Listen and 2. 443 echo "Listen 443" > test.out grep 'Listen *443' test.out | grep -v '#' Listen 443 The above worked fine but when the entry changes to the below the grep fails... (2 Replies)
Discussion started by: mohtashims
2 Replies

2. AIX

Issue with wildcard in filename (AIX 7.1.0.0)

Hi, This has been pestering me for quite a while, any help will be highly appreciated The current directory has a file with below name npidata_20050523-20171210.csv The below wildcard matched the above file ls -ltr npidata_????????-201712??.csv But when the part '201712' is put... (6 Replies)
Discussion started by: zulfi123786
6 Replies

3. UNIX for Beginners Questions & Answers

Find and replace with wildcard

HI there, I am trying to find and replace with wildcard with data chr1 69511 69511 A G 1/1:0,34:791,78,0:78:34 0/1:55,60:1130,0,1513:99:116 1/1:0,28:630,63,0:63:28 0/1:0,34:626,57,0:57:34 To this chr1 69511 69511 A G homo hetero homo hetero Where I find and replace 0/1 with... (3 Replies)
Discussion started by: daashti
3 Replies

4. UNIX for Dummies Questions & Answers

Unable to find files, those can be present anywhere in the directory tree,based on its creation date

Hi I am unable to find files, those are present anywhere in the same directory tree, based on the creation date. I need to find the files with their path, as I need to create them in another location and move them. I need some help with a script that may do the job. Please help (2 Replies)
Discussion started by: sam192837465
2 Replies

5. 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

6. Shell Programming and Scripting

find command with wildcard directory

I want to look if there is any file inside a specific directory which was modified before 2 days. I wrote the find command, but the problem is there is one directory and that is a random directory generated by unix, so not sure on how to code for that on the find command. find... (5 Replies)
Discussion started by: srini0603
5 Replies

7. Shell Programming and Scripting

Find replace a particular string of data with wildcard

Hi I am having a csv file in which lots of data are available wherein i need to find a particular kind of data and replace it with null value. here is the sample data.. I need to find the string starting with 404-064- and up to the first space i have to remove the data and keep the... (4 Replies)
Discussion started by: aemunathan
4 Replies

8. Solaris

Problem in using wildcard characters in xargs with find

Hi, Under my parent diectory I have directory named "Response" in many of its subfolders. I am interested to see all files with extention .pro in Response Directory. I am giving following command - find . -name "Response" -type d | xargs -i ls -lrt {}/*.pro but it is not giving result. ... (3 Replies)
Discussion started by: sanjay1979
3 Replies

9. Shell Programming and Scripting

Wildcard in Cshell find command

The following command works fine in my cshell script: set Deliverables = `find . -name "eliverables" -print` The following command does not work: set LASFiles = `find . -name "*." -print` In the first example, when tested in an if statement, the script will continue whether a... (3 Replies)
Discussion started by: phudgens
3 Replies

10. UNIX for Dummies Questions & Answers

Find wildcard .shtml files in wildcard directories and removing them- How's it done?

I'm trying to figure out how to build a small shell script that will find old .shtml files in every /tgp/ directory on the server and delete them if they are older than 10 days... The structure of the paths are like this: /home/domains/www.domain2.com/tgp/ /home/domains/www.domain3.com/tgp/... (1 Reply)
Discussion started by: Neko
1 Replies
Login or Register to Ask a Question