Assistance with my Find command to identify last part of a file name and report the name found


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Assistance with my Find command to identify last part of a file name and report the name found
# 1  
Old 11-16-2019
Assistance with my Find command to identify last part of a file name and report the name found

Hello Forum,

We have two bootstraps of Chef in our environment which are identified by colour:

Code:
/var/chef/cache/cookbooks/bootstrap_cookbooks_version_green

and
Code:
/var/chef/cache/cookbooks/bootstrap_cookbooks_version_red

I'm attempting to identify which version is installed based on the name of the file. So far I've been able to use the following find command to help me identify the full name:

Code:
find /var/chef/cache/cookbooks/ -name "bootstrap*" -print

I think I need to redirect the result using 2>/dev/null and then pipe to use grep and identify if the filename has red or green in the name or the name isn't found.

I'd like to be able to make the report a little cleaner by reporting back if the filename had either "red" or "green" or couldn't find the file.

One more requirement is that I would like to have this command in a one liner if possible.

Thanks in advance for any advice you can provide me.
# 2  
Old 11-16-2019
Do the two file versions coexist, or is there one single file max?
And, why a one liner? What be the benefit thereof?
These 2 Users Gave Thanks to RudiC For This Post:
# 3  
Old 11-16-2019
Hello RudiC and thank you for this reply and inquiry.

The two file versions will never coexist together. It will either be:
bootstrap_cookbooks_version_green
bootstrap_cookbooks_version_red
or the file won't exist at all.

The reason for the oneliner is because I'm using a "Here Doc" in Bash to connect once to a group of servers and I'm issuing multiple commands against each server for a report. I know there are better ways to do this but this is the script we started with and what I'm supporting for now since the report from this script is actively used daily. Eventually I will move us to another way to retrieve the results we need but for now I'm keeping this script alive. So far I've been able to acheive what I need in this Here Doc step of the script whereby each data I want to retrieve from the remote server is contained all in one liner commands.

I hope this explanation is enough as to why I'm hoping I can answer this question using a one line command to identify the filename in this folder.

Thank you.
# 4  
Old 11-16-2019
Well, then, try
Code:
TMP=$(find /where/so/ever -iname "*bootstrap*"); case ${TMP##*_} in (green) echo "is green";; (red) echo "is red";; (*) echo "is missing";; esac


You could, of course, also use grep for the same purpose.

Last edited by RudiC; 11-16-2019 at 04:43 PM..
This User Gave Thanks to RudiC For This Post:
# 5  
Old 11-17-2019
If you know the possible pathnames then you don't need find and grep.
Code:
if [ -f /var/chef/cache/cookbooks/bootstrap_cookbooks_version_green ]
then echo "green"
elif [ -f /var/chef/cache/cookbooks/bootstrap_cookbooks_version_red ]
then echo "red"
else echo "does not exist"
fi

This User Gave Thanks to MadeInGermany For This Post:
# 6  
Old 11-18-2019
Thanks RudiC...your code worked perfectly!

Thanks for the reply MadeinGermany. I needed a one liner but I'll save your example code for future reference!

Appreciate all your help.
# 7  
Old 11-18-2019
How about one of these two lines:
Code:
[ -f /var/chef/cache/cookbooks/bootstrap_cookbooks_version_* ] && echo /var/chef/cache/cookbooks/bootstrap_cookbooks_version_* | sed 's/.*version_//'
f=$(echo/var/chef/cache/cookbooks/bootstrap_cookbooks_version_*) && [ -f "$f" ] && echo ${f##*_}

The second has the advantage of using POSIX shell builtin commands.

Andrew
This User Gave Thanks to apmcd47 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Assistance with my one line command to find all inactive kernels

Hello Forum, I'm using the following command to find all inactive kernels installed on my RHEL server: $ rpm -qa | grep '^kernel-' |grep -vE `uname -r` but the result is in two lines: kernel-3.10.0-1062.1.1.el7.x86_64 kernel-3.10.0-1062.el7.x86_64 Is there a one line command I can... (3 Replies)
Discussion started by: greavette
3 Replies

2. Shell Programming and Scripting

String variable as part of expression in find command

Hi, I am new in scripting, and I am currently working on a script that will look for other files in a certain directory and exclude some file type. this works fine:Find_File2Exclude=`find ${paths} -maxdepth 1 -type f \( ! -iname '*.out' ! -iname '*.auc' ! -iname '*.cps' ! -iname '*.log' ! -iname... (4 Replies)
Discussion started by: kedd05
4 Replies

3. Red Hat

Identify the folder is part of which mount point

Dear, I am using Redhat 6.6 . How to identify a given directory is part of which mount point. (2 Replies)
Discussion started by: aneesha
2 Replies

4. Shell Programming and Scripting

Assistance on making a report log file

:):):):):) (0 Replies)
Discussion started by: bryan101
0 Replies

5. UNIX for Dummies Questions & Answers

[Solved] Assistance with find command please

Trying to locate files less than xx days old, throughout all directories/subdirectories, but excluding certain types of directories and files. The directories I want to search all contain the same characteristic (dbdef, pldef, ghdef, etc), and there are subdirectories within that I need to... (2 Replies)
Discussion started by: Condmach
2 Replies

6. UNIX for Dummies Questions & Answers

File not found using find

Hi, i'm currently writing a script which tidys up old files. When using the find command I found that some files were not being listed /export/home/ops***/test: ls -l processed total 0 -rw-rw-r-- 1 ops*** ****** 0 Apr 20 11:53 test99 /export/home/ops***/test: ls -l total 4... (9 Replies)
Discussion started by: chris01010
9 Replies

7. Shell Programming and Scripting

print as well as count the files found by find command

I want the output of the find command to be printed and also the total files found by it. Can someone help in this. Obviously $ find . -type f | wc -l will not output the files found but only the count. I want both. There can be millions and trillions of files so dont want the output of find... (3 Replies)
Discussion started by: amicon007
3 Replies

8. Shell Programming and Scripting

find command in while loop - how to get control when no files found?

I have the following statement in script: find ${LANDING_FILE_DIR}${BTIME_FILENAME_PATTERN2} -print | while read file; do ... done When there are no files located by the find comand it returns: "find: bad status-- /home/rnitcher/test/....." to the command line How do I get control in... (3 Replies)
Discussion started by: mavsman
3 Replies

9. Shell Programming and Scripting

Help with find command and list in a long format each found file

The purpose of those comands are to find the newest file in a directory acvrdind to system date, and it has to be recursively found in each directory. The problem is that i want to list in a long format every found file, but the commands i use produce unexpected results ,so the output lists in a... (5 Replies)
Discussion started by: alexcol
5 Replies
Login or Register to Ask a Question