Visit Our UNIX and Linux User Community


System-wide search


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting System-wide search
# 1  
Old 05-30-2017
System-wide search

When looking for wherever a program or a filename appears in the system, a short scrip is "findinner" which another script calls with a long parameter list consisting of path names ending with ".sh" or ".menu". "findinner" looks like this:
Code:
# If not .savenn file, show name and result of grep.
#
for i in "$@"
do
  echo $i |grep -q 'save[01][0-9]'
  if [ $? -ne 0 ]
  then
    echo "<<<<<<<<<<<<<<<< $i >>>>>>>>>>>"
    grep HardCodedSearchItem $i
  fi
done

Is there a way to not have to modify "findinner" every time it is used? I would prefer to leave the scripts alone and just provide the search term as a parameter.

Is there any way to do this? TIA.
# 2  
Old 05-30-2017
Pass the search pattern as the 1st argument to your script, then:
Code:
# If not .savenn file, show name and result of grep.
#
pattern=$1
shift
for i in "$@"
do
  echo $i |grep -q 'save[01][0-9]'
  if [ $? -ne 0 ]
  then
    echo "<<<<<<<<<<<<<<<< $i >>>>>>>>>>>"
    grep "$pattern" "$i"
  fi
done

This User Gave Thanks to Don Cragun For This Post:
# 3  
Old 05-31-2017
Btw., this:

Quote:
Originally Posted by Don Cragun
Code:
  [...]
  echo $i |grep -q 'save[01][0-9]'
  if [ $? -ne 0 ]
  [...]

could also be written:
Code:
  if ! echo $i |grep -q 'save[01][0-9]'
  then
  [....]

generally:

Code:
if <cmd> ; then

the if-branch will be executed if <cmd> returns 0, the else-branch otherwise.

Code:
if ! <cmd> ; then

the if-branch will be executed if <cmd> returns <>0, the else-branch if it returns 0.

I hope this helps.

bakunin
# 4  
Old 05-31-2017
Could you not also use find to drive this rather than building your own where you have to feed it a list? You don't give much information about what else there is, but this might help:-
Code:
find . -name "*save[0-9][0-9]*" -type f -exec grep "$pattern" {} \;

If the file name search is for path names, then you could do something more like this:-
Code:
find *save[0-9][0-9]* -type f -exec grep "$pattern" {} \;


Do either of these give you an option? They should be more efficient than calling grep for every parameter, especially as the list gets longer and would reduce the risks of too long a command line getting rejected.

You could even combine them if that helps:
  • If you want all files that match save[0-9][0-9] and finish .sh then you can
    find . -name "*save[0-9][0-9]*.sh" .....
  • If you want files in directories that match save[0-9][0-9] and finish .sh then you can
    find *save[0-9][0-9]* -name "*.sh" ......
  • If you want some other variation or combination we can probably help there too.


Are any of these useful?
Robin
# 5  
Old 06-01-2017
I changed the script findinner using Don's suggestions. The script that calls it now starts with the search term "$1" followed by paths ending in star names.

Thanks again.

Previous Thread | Next Thread
Test Your Knowledge in Computers #586
Difficulty: Medium
Making many function calls can be costly in terms of stack space. One optimization that can be made is to use tail recursion.
True or False?

10 More Discussions You Might Find Interesting

1. Programming

How to make use others' C library installed not for the system-wide (Ubuntu/Linux)?

I have downloaded and installed a library called htslib for specific bioinformatic use but not for the system (I'm using Ubuntu 18.04). Only parts of the library is needed for my exercise to parse data in a type called VCF format (basically tab-delimited file but contains many information in... (14 Replies)
Discussion started by: yifangt
14 Replies

2. Red Hat

Changing system-wide for umask

Hi everybody, How can I change the default UMASK for non root users, e.g. I want the umask for every new created user will be 0044. Thanks (6 Replies)
Discussion started by: leo_ultra_leo
6 Replies

3. UNIX for Dummies Questions & Answers

[GPG] System-wide public key?

We need to have many of our users all send encrypted files to a single FTP server. The problem, if I understand how encryption/decryption works (which I don't), is that each user would normally have their own private and public key. The other end needs to be able to decrypt the file(s) using a... (6 Replies)
Discussion started by: Totengraber
6 Replies

4. UNIX for Advanced & Expert Users

Declaring LD_PRELOAD system wide for dynamic loading

Dear Fellows; As being new to linux, i have tried to synamically load a custom library which overrides some system calls like conncet(), socket() etc.... for custom purposes. It works well, if declaring the environment path LD_PRELOAD and execution of the application to be override... (0 Replies)
Discussion started by: mzeeshan
0 Replies

5. Linux

System wide find and sort

Hi, I need to look for a config file (ldap.conf) and pick the latest modified file. `locate` tells me there are many ldap.conf's, some in /etc, /usr, /home, etc. Is there some way I can sort them by last modified time via bash? I was thinking maybe I could pipe the output of `locate` to `ls... (4 Replies)
Discussion started by: Housni
4 Replies

6. HP-UX

System wide user thread limit. does that exists :?

Hi all, Is there any system wide limit on number of user threads. I only find nkthread as a tunable parameter,apart from the `per process limit`. (1 Reply)
Discussion started by: Krsh
1 Replies

7. Shell Programming and Scripting

system wide password change

Hello, I am new to shell scripting and I was trying to write a script that would force a system wide password change except for admins. I am having some trouble and any help that someone could give me would be greatly appreciated. I am trying to do it by using the UID as the marker for anyone... (6 Replies)
Discussion started by: kilemark
6 Replies

8. UNIX for Dummies Questions & Answers

FIND function - system wide

Hi, I have a task to search for a file called 'Xstartup' in the whole system because there might be different versions of it which overrite eachother. Can anyone suggest a smart command to run this search ? The machine needs to scan every single folder beginning from root. Please help, I am... (5 Replies)
Discussion started by: DGoubine
5 Replies

9. UNIX for Advanced & Expert Users

System wide CDE setup

Does anyone know how to make system wide changes to the CDE's front panel icons? I dont know if it matters but im running Solaris 9. THanks (1 Reply)
Discussion started by: meyersp
1 Replies

10. UNIX for Dummies Questions & Answers

links working system wide

I have created symbolic links to several frequently used commands, for example: "lt" is a link to "ls -ltrgo|tail". What can I do to make these links available system-wide, or at least in the directories my coworkers are in most of the time? I have copied the link to several directories, and... (6 Replies)
Discussion started by: jpprial
6 Replies

Featured Tech Videos