Bash - Find files excluding file patterns and subfolder patterns


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Bash - Find files excluding file patterns and subfolder patterns
# 1  
Old 09-21-2017
Bash - Find files excluding file patterns and subfolder patterns

Hello.
For a given folder, I want to select any files
Code:
find $PATH1 -f \( -name "*"

but omit any files like pattern name
Code:
 ! -iname "*.jpg" ! -iname "*.xsession*" ..... \)

and also omit any subfolder like pattern name
Code:
 -type d \( -name "/etc/gconf/gconf.*" -o -name "*cache*" -o -name "*Cache*" -o -name ".mozilla" -o -name ".googleearth"  \) -prune

My last try is :
Code:
find "$PATH1"  -type f \( -name "*" ! -iname "*~"  ! -iname "*.iso"  ! -iname "*.tar"  ! -iname "*.bz2"  ! -iname "*.gz"
  ! -iname "*.tgz"  ! -iname "*.7z"  ! -iname "*.sfx"  ! -iname "*.zip"  ! -iname "*.rpm" 
 ! -iname "*.gz.aa"  ! -iname "*.rpm"  ! -iname "*.pdf"  ! -iname "*.png"  ! -iname "*.jpg"  ! -iname "*.dll" 
 ! -iname "*.exe"  ! -iname "*.xsession*"  \) -type d \( -name "/etc/gconf/gconf.*" -o -name ".cache" 
-o -name ".Cache" -o -name ".mozilla" -o -name ".googleearth"  \) -prune  -o -print

I still got files ".cache*" from ".mozilla", ".Cache*" from googleearth, ".xsession-errors" and ".xsession-errors-:0"

By the way I am not sure that the pattern
Code:
! -iname "*.xsession*"

is a good pattern for
Code:
/home/some_user/.xsession-errors

Filtering subfolders works :
Code:
find "$PATH1"  -type d \( -name "/etc/gconf/gconf.*" -o -name ".cache" 
-o -name ".Cache" -o -name ".mozilla" -o -name ".googleearth"  \) -prune  -o -print

How to add file patterns exclusion.

Any help is welcome
# 2  
Old 09-21-2017
Maintaining something like that is hard - as you found out.
Consider splitting up the lists, make a file with the exclusion patterns, one pattern per line.
Call it exclusions. Changes in red.

Example:
Code:
find "$PATH1"  -type f \( -name "*" ! -iname "*~"  ! -iname "*.iso"  ! -iname "*.tar"  ! -iname "*.bz2"  ! -iname "*.gz"
  ! -iname "*.tgz"  ! -iname "*.7z"  ! -iname "*.sfx"  ! -iname "*.zip"  ! -iname "*.rpm" 
 ! -iname "*.gz.aa"  ! -iname "*.rpm"  ! -iname "*.pdf"  ! -iname "*.png"  ! -iname "*.jpg"  ! -iname "*.dll" 
 ! -iname "*.exe"  ! -iname "*.xsession*"  \) -a -type d \( -name "/etc/gconf/gconf.*" -o -name ".cache" 
-o -name ".Cache" -o -name ".mozilla" -o -name ".googleearth"  \) -prune  -o -print    | grep -v -f $HOME/exclusions > resultfile 

In order to test exclusions you can feed it output from a directory that had oddball file names
Code:
ls -a /path/to/somedir | grep  -f $HOME/exclusions   # note: no -v option

# 3  
Old 09-21-2017
By default
Code:
echo *

does not match filenames that start with a dot.
So you might need ! -iname "*.xession* ! -iname ".xsession*"
But not needed if you exclude all .* by requiring -name *.
To not descend into directories, I think you need -o instead of the -a in the last post. But how to fiddle the -print in the middle?
It is more comfortable to first exclude the directories.
Code:
find "$PATH1" \
 -type d \( -path "/etc/gconf/gconf.*" -o -name ".[Cc]ache" -o -name ".mozilla" -o -name ".googleearth"  \) -prune -o \
 -type f  -name "*"  ! -iname "*~"  ! -iname "*.iso"  ! -iname "*.tar"  ! -iname "*.bz2"  ! -iname "*.gz"   ! -iname "*.tgz" \
 ! -iname "*.7z"  ! -iname "*.sfx"  ! -iname "*.zip"  ! -iname "*.rpm"  ! -iname "*.gz.aa"  ! -iname "*.pdf"  ! -iname "*.png" \
 ! -iname "*.jpg"  ! -iname "*.dll"  ! -iname "*.exe"  ! -iname "*.xsession*" -print

The explicit -print is needed, otherwise it will default-print the pruned directory names.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find files not matching multiple patterns and then delete anything older than 10 days

Hi, I have multiple files in my log folder. e.g: a_m1.log b_1.log c_1.log d_1.log b_2.log c_2.log d_2.log e_m1.log a_m2.log e_m2.log I need to keep latest 10 instances of each file. I can write multiple find commands but looking if it is possible in one line. m file are monthly... (4 Replies)
Discussion started by: wahi80
4 Replies

2. Shell Programming and Scripting

Help needed in excluding certain word patterns

Hi, I need help with following. I need to exclude words that match following patterns a. more than length 4 (example SBRAP) b. contains mixture uppercase and lower case regardless of the length (example GSpD) File contains COFpC MCHX SP SNFCA GEH SBRAP DGICA JPMpE WFCpP GSpD AXL... (5 Replies)
Discussion started by: jakSun8
5 Replies

3. Shell Programming and Scripting

Find matched patterns and print them with other patterns not the whole line

Hi, I am trying to extract some patterns from a line. The input file is space delimited and i could not use column to get value after "IN" or "OUT" patterns as there could be multiple white spaces before the next digits that i need to print in the output file . I need to print 3 patterns in a... (3 Replies)
Discussion started by: redse171
3 Replies

4. Shell Programming and Scripting

Find matched patterns in a column of 2 files with different size and merge them

Hi, i have input files like below:- input1 Name Seq_ID NewID Scores MT1 A0QZX3 1.65 277.4 IVO A0QZX3 1.65 244.5 HPO A0QZX3 1.65 240.5 RgP A0Q3PP 5.32 241.0 GX1 LPSZ3S 96.1 216.9 MEL LPSS3X 4.23 204.1 LDD LPSS3X 4.23 100.2 input2 Fac AddName NewID ... (9 Replies)
Discussion started by: redse171
9 Replies

5. Shell Programming and Scripting

Find matched patterns in multiple files

Hi, I need help to find matched patterns in 30 files residing in a folder simultaneously. All these files only contain 1 column. For example, File1 Gr_1 st-e34ss-11dd bt-wwd-fewq pt-wq02-ddpk pw-xsw17-aqpp Gr_2 srq-wy09-yyd9 sqq-fdfs-ffs9 Gr_3 etas-qqa-dfw ddw-ppls-qqw... (10 Replies)
Discussion started by: redse171
10 Replies

6. UNIX for Dummies Questions & Answers

Find diff between two patterns in two files and append

Hi, I'm a newbie at programming in Unix, and I seem to have a task that is greater than I can handle. Trying to learn awk by the way (but in the end, i just need something that works). My goal is to compare two files and output the difference between the two. I've been reading, and I think I... (5 Replies)
Discussion started by: legato22
5 Replies

7. Shell Programming and Scripting

Excluding patterns from a list

I have the following code that takes the command line arguments. However I want to remove from the command line list the user options. For example, removing --quiet --shift=3 sort=4/5/6 I have written the following code to take care of this situation. set strLst = `echo $argv | tr '... (3 Replies)
Discussion started by: kristinu
3 Replies

8. Shell Programming and Scripting

Find files that do not match specific patterns

Hi all, I have been searching online to find the answer for getting a list of files that do not match certain criteria but have been unsuccessful. I have a directory that has many jpg files. What I need to do is get a list of the files that do not match both of the following patterns (I have... (21 Replies)
Discussion started by: nikos-koutax
21 Replies

9. Shell Programming and Scripting

Searching patterns in 1 file and deleting all lines with those patterns in 2nd file

Hi Gurus, I have a file say for ex. file1 which has 3500 lines in it which are different account numbers and another file (file2) which has 230000 lines in it. I want to read all the lines in file1 and delete all those lines from file2 which has that same pattern as in file1. I am not quite... (4 Replies)
Discussion started by: toms
4 Replies

10. Shell Programming and Scripting

To find 3 patterns in a file

hy i have a requirement in which my script needs to find 3 patterns in a file and if any pattern is missing it should sent a mail Patterns Interval60min_Daily_readings$a.txt Interval_Daily_readings$a.txt Daily_readings$a.txt Basically i want to test for the above Patterns in the... (2 Replies)
Discussion started by: ali560045
2 Replies
Login or Register to Ask a Question