954,124 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

how to recursive search of subdiretories in BASH script

can anyone modify my code to make it recursive search of subdiretories, currently this code only can search of particular directory.


#!/bin/bash
if test $# -eq 0 ; then
echo usage: "${0##/*} [Dir name]"
exit
fi
for arg in $* ; do
if test -e $arg ; then
maxLen=0 # <= !
files=$(ls $arg) # <=
for file in $files ; do
newLen=${#file}
if [ $newLen -gt $maxLen ] ; then
maxLen=$newLen
fileName=$file
fi
done
echo "[ Direcroty ] : $arg"
echo "[ File name ] : $fileName"
echo "[ Max length ] : $maxLen"
else
echo Cannot find $arg
fi
done
#End


botherguy

botherguy
Newbie Poster
1 post since May 2004
Reputation Points: 10
Solved Threads: 0
 

Hi there

Perhaps this thread may give you pointers on what you are trying to do, it includes code examples for a similar question a few weeks ago:
Thread on bash searching

From what you have shown wouldn't the find command be more appropriate for you though?

ie:

find . -name filename -print


That will recurusivly (sp?) search through directories finding all occurances of the file called filename.

HTH

Ben

liliafan
Junior Poster
117 posts since Apr 2004
Reputation Points: 66
Solved Threads: 3
 

I just had to creat a script that would recursively list files that woould equal or exceed X number of bytes with 2 arguments: the first one woould be where to start looking and the second the size to equal or exceed. For example ./test.sh /etc 5000

This is the code I used:

#!/bin/bash
#validate there are 2 arguments passed
#validate argument 1 exists and display an error if it does not
#validate argument 2 is a number and display error if not
directory=$1
size=$2
find $1 -size +$2c
if test -d $1; then directory=$1; else echo "Directory invalid"
fi
if test $size -ge 0; then size=$2; else echo "Specify a file size"
fi

tccummings
Newbie Poster
15 posts since Jul 2004
Reputation Points: 10
Solved Threads: 0
 

#!/bin/bash
if test $# -eq 0 ; then
echo usage: "${0##/*} [Dir name]"
exit
fi
echo 'Search in directory $* for the flienames with length > 30'
for arg in $* ; do
if test -e $arg ; then
maxLen=30 # <= !
files=$(ls -lR $arg | grep '[^d]' | awk '{print $9}') # <=
for file in $files ; do
newLen=${#file}
#newLen=`expr length $file`
#echo "Length of the $file : $newLen"
if [ $newLen -ge $maxLen ] ; then
#maxLen=$newLen
fileName=$file
#echo $fileName
rootdir=$arg
echo `find $rootdir -name $fileName`
echo $dir
fi
done
else
echo Cannot find $arg
fi
done
#End

can anyone modify my code to make it recursive search of subdiretories, currently this code only can search of particular directory.

#!/bin/bash if test $# -eq 0 ; then echo usage: "${0##/*} [Dir name]" exit fi for arg in $* ; do if test -e $arg ; then maxLen=0 # <= ! files=$(ls $arg) # <= for file in $files ; do newLen=${#file} if [ $newLen -gt $maxLen ] ; then maxLen=$newLen fileName=$file fi done echo "[ Direcroty ] : $arg" echo "[ File name ] : $fileName" echo "[ Max length ] : $maxLen" else echo Cannot find $arg fi done #End

botherguy

ramkmaddela
Newbie Poster
1 post since Oct 2009
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You