Visit Our UNIX and Linux User Community


find command in shell script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting find command in shell script
# 1  
Old 05-19-2010
find command in shell script

Hi,
dirs.conf fine contains below data
Code:
/a/b/c/dir1|50
/a/b/c/dir2|50
/a/b/c/dir3|50

In a shell script I do as below
Code:
while read file_rec
do
        dir_name=`echo "${file_rec}" | cut -d "|" -f 1`
        purge_days=`echo "${file_rec}" | cut -d "|" -f 2`

        if [ -d $dir_name ]
        then
        echo "#### The purge days for the directory ${dir_name} is ${purge_days} ####" >> $log
        # To list files with the format YY-MM-DD
	find ${dir_name} -type f -name \"*[1-2][09][0-9][0-9]-[01][0-9]-[0-3][0-9]*\" -mtime +${purge_days} -exec ls -ltr {} \\; >> $log
        else
        echo "*** The directory $dir_name does not exists ***" >> $log
        fi
        dir_name=""
        purge_days=""
done < dirs.conf

My problem is, the find command is not running and listing the old files in log file

Can someone help...

Regards,

Moderator's Comments:
Mod Comment Use code tags please, ty!

Last edited by zaxxon; 05-19-2010 at 08:07 AM..
# 2  
Old 05-19-2010
Quote:
Originally Posted by icefish
Hi,
dirs.conf fine contains below data
Code:
/a/b/c/dir1|50
/a/b/c/dir2|50
/a/b/c/dir3|50

In a shell script I do as below
Code:
while read file_rec
do
        dir_name=`echo "${file_rec}" | cut -d "|" -f 1`
        purge_days=`echo "${file_rec}" | cut -d "|" -f 2`


You dont need to call external commands to split strings. Either use parameter expansion:

Code:
dir_name=${file_rec%|*}
purge_days=${file_rec#*|}

Or use multiple variables in your read command:
Code:
IFS='|' read dir_name purge_days

Quote:
Code:
  if [ -d $dir_name ]


Quote your variable references:
Code:
  if [ -d "$dir_name" ]

Quote:
Code:
  then
    echo "#### The purge days for the directory ${dir_name} is ${purge_days} ####" >> $log
    # To list files with the format YY-MM-DD
	  find ${dir_name} -type f -name \"*[1-2][09][0-9][0-9]-[01][0-9]-[0-3][0-9]*\" -mtime +${purge_days} -exec ls -ltr {} \\; >> $log


Don't escape the quotes or the backslash:
Code:
find "$dir_name" -type f -name "*[1-2][09][0-9][0-9]-[01][0-9]-[0-3][0-9]*" \
                                -mtime +"$purge_days" -exec ls -ltr {} \; >> $log

The -t and -r options to ls will not do anything as you are giving ls a single filename
Quote:
Code:
  else
    echo "*** The directory $dir_name does not exists ***" >> $log
  fi
  dir_name=""
  purge_days=""
  done < dirs.conf

My problem is, the find command is not running and listing the old files in log file
# 3  
Old 05-19-2010
Two things: a) if you run this with set -x does it appear to interpolate all of your variables correctly?; and, b) if it does, and you take this same interpolated find query and run it manually, does it work then?

I also notice the extra ;-char at the end of the find query. Why do you need to include this? The find shouldn't need additional prompting.

Last edited by curleb; 05-19-2010 at 08:23 AM.. Reason: android...again
# 4  
Old 05-19-2010
Thanks Johnson the double quote substitution worked.

Previous Thread | Next Thread
Test Your Knowledge in Computers #627
Difficulty: Medium
When a function clones itself, it is considered to be recursive-clone function.
True or False?

10 More Discussions You Might Find Interesting

1. HP-UX

Find command doesn't return in shell script.

Hi All, I am using below snippet to search for a string (read from a file 'searchstring.out') in all locations (/) and then iterate over the files found to write the locations and the respective owner to an output file. However, this doesn't work as I believe the find command doesn't exit's... (11 Replies)
Discussion started by: Vipin Batra
11 Replies

2. Shell Programming and Scripting

Unable to pass shell script variable to awk command in same shell script

I have a shell script (.sh) and I want to pass a parameter value to the awk command but I am getting exception, please assist. diff=$1$2.diff id=$2 new=new_$diff echo "My id is $1" echo "I want to sync for user account $id" ##awk command I am using is as below cat $diff | awk... (2 Replies)
Discussion started by: Ashunayak
2 Replies

3. Shell Programming and Scripting

find command in shell script

Hi all, Please i need an explanation for the following statements ref_file=/tmp/cleanfiles export ref_file touch `TZ=WAT+2 date "+%Y%m%d%H%M"` $ref_file find . ! -name . -prune -type f ! -newer $ref_file -exec store_file.sh {} \; (1 Reply)
Discussion started by: anish_1982
1 Replies

4. UNIX for Dummies Questions & Answers

find command in shell script doesn't work

Hello all, Something strange going on with a shell script I'm writing. It's trying to write a list of files that it finds in a given directory to another file. But I also have a skip list so matching files that are in that skip list should be, well uhm, skipped :) Here's the code of my... (2 Replies)
Discussion started by: StijnV
2 Replies

5. Shell Programming and Scripting

Find command in Shell Script

hi I am a newbee in Shell scripting (hardly 7 days) I have to execute a shell script which looks like this #!/bin/sh var1=`date +"%Y%m%d"` echo $var1 find . -name "$var1*" -exec mv {} Delete/ \; the find command in the script is running independently but when kept in this script it is... (24 Replies)
Discussion started by: sweetnsourabh
24 Replies

6. Shell Programming and Scripting

Find command in Korn Shell

Hi, I am trying to execute the below in Ksh (telnet) find ./request.txt -mmin -30 It says find: bad option -mmin What i am trying to do is by using find command i am checking wheather the file request.txt is there for 30 minutes or not Please help (1 Reply)
Discussion started by: chinniforu2003
1 Replies

7. Shell Programming and Scripting

script to find whether shell command is available

I am running shell scripts on windows using Cygwin tool. In my shell scripts, i want to add an error check, that verify whether a certain command is available or not. For example if SED comamnd is not available in Cygwin, then it should exit with error message. How do i write such shell... (2 Replies)
Discussion started by: mmunir
2 Replies

8. UNIX for Dummies Questions & Answers

Shell script 'find' command

I have a script that has the following command: find /home/user -name test.dat The script works as desired when running normally. However, when I run the script preceding it with 'sh', it fails. Is there something I need to account for when preceding the execution of the script with 'sh'? (1 Reply)
Discussion started by: bsavitch
1 Replies

9. UNIX for Advanced & Expert Users

find command from a shell script

Hi experts, I have a shell script (korn shell on aix) where I am giving find command with file options which are read from a configuration file. For some reason I am getting an error find: 0652-017. I have put set -x in the shell script and the command looks okay. If I cut it and paste it in the... (6 Replies)
Discussion started by: kodermanna
6 Replies

10. UNIX for Advanced & Expert Users

Problem with find command in C-shell

when i use the following command find / -name '*.*' -exec grep -il 'text' {} \; I can redirect the errors to /dev/null. This happens only in ksh but not in csh. the 2>/dev/null is not working in csh. Can you some one suggest an alternative for this in csh ? (3 Replies)
Discussion started by: dhanamurthy
3 Replies

Featured Tech Videos