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

Recommended Answers

All 3 Replies

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

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

#!/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

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.