Recursion in a bash script


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Recursion in a bash script
# 1  
Old 04-25-2013
Recursion in a bash script

So the problem I am having is recursion with in bash. Specifically the program ideally takes either the current or provided directory, lists out everything in that directory, if it finds another directory the script should call itself and go into that directory. I managed to get it to dive into the next working directory with this code:
Code:
list=`ls`
for l in $list
 if [ -d $l ] ; then
  cd $l
  echo "I'm in $l"
  dir=`pwd`
  cd ../
  bash script.bash $dir
 fi
done

My thinking proccess behind this was that it dives into that directory, states it's in there, gets the full path of that directory and stores it in a variable, get out of that directory to were the bash script is, then passes the created variable into the script. I was hoping that the bash script would then dive into the specified directory and do the same thing but it doesn't sadly.
# 2  
Old 04-25-2013
You didn't explain what issue that you are facing with your code!

But I noticed that you are missing a do
Code:
for l in $list
do
 if [ -d $l ] ; then

# 3  
Old 04-25-2013
Quote:
Originally Posted by Yoda
You didn't explain what issue that you are facing with your code!

But I noticed that you are missing a do
Code:
for l in $list
do
 if [ -d $l ] ; then

Sorry, the issue is that the code doesn't work as I want it to work. I don't quite understand how to recurse through the directories using a bash script, what the code I posted above does is it dives into the next directory, says it's in there, jumps out, and does it again for the next directory in the list. What it DOESN'T do is, go the extra mile like it's supposed to and recurse through the entire directory tree, like say it finds dir Test/, it dives inside, gets the full path, dives out, then calls itself with Test/ as its calling directory, then it's supposed to find all the dirs in there like Test1/, and repeat the process. I have a hard time explaining things sometimes so forgive me.
# 4  
Old 04-25-2013
If you make that code a function, it can call itself.

Code:
recurse_directory() {
        local FILE
        for FILE in ./$1/*
        do
                [ -d "$FILE" ] && recurse_directory "./$1/$FILE"
        done
}

recurse_directory ./

# 5  
Old 04-25-2013
Quote:
Originally Posted by Corona688
If you make that code a function, it can call itself.

Code:
recurse_directory() {
        local FILE
        for FILE in ./$1/*
        do
                [ -d "$FILE" ] && recurse_directory "./$1/$FILE"
        done
}

recurse_directory ./

Can you explain this code a little bit? I mainly don't get what the "local FILE" line does
# 6  
Old 04-25-2013
Quote:
Originally Posted by mistsong1
Can you explain this code a little bit? I mainly don't get what the "local FILE" line does
It declares a variable named "FILE" which is local to the function - outside of this function it is not known.

I suggest you consult a man page for bash for keywords you don't know. Usually they are explained there in detail.

I hope this helps.

bakunin
# 7  
Old 04-25-2013
Comment on the original code.
You don't make use of $1 parameter so don't need $dir
Indeed you can use the inheritance of the current work directory - but you need to change it before the recursive call.
So do not restore it i.e. do not cd .. (you may but not need to do cd .. afterwards)
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to block first bash script until second bash script script launches web server/site?

I'm new to utilities like socat and netcat and I'm not clear if they will do what I need. I have a "compileDeployStartWebServer.sh" script and a "StartBrowser.sh" script that are started by emacs/elisp at the same time in two different processes. I'm using Cygwin bash on Windows 10. My... (3 Replies)
Discussion started by: siegfried
3 Replies

2. Shell Programming and Scripting

Bash variable recursion

Not sure how to ask this question. I want concatenate strings and variable recursively into new variable. For example: infile01=/dir/subfolder/file01.txt infile02=/dir/subfolder/file02.txt infile03=/dir/subfolder/file03.txt for i in {01..03} do u=${"infile"$i} echo $u doneI got error... (7 Replies)
Discussion started by: yifangt
7 Replies

3. Shell Programming and Scripting

script recursion

Can someone please explain me why the following script calls it self recursively: #!/bin/bash echo Called $0 while this not: #!/bin/bash echo Called $($0) Thanks (6 Replies)
Discussion started by: superpointer
6 Replies

4. Programming

C Recursion (explain)

Hi, Question: how come the output is like that? Can explain to me abit. I am learning C. Thanks! #include <stdio.h> #include <string.h> void printit(char line_of_char, int index); int main() { char line_of_char; int index = -1; strcpy(line_of_char, "This is a string."); ... (5 Replies)
Discussion started by: seede
5 Replies

5. Shell Programming and Scripting

Shell script to generate Fibonacci series using recursion

I am facing problem with Shell script to generate Fibonacci series using recursion i.e. recursive function. Here is my script: #!/bin/sh fibo() { no=$1 if ; then return 0 elif ; then return 1 else a1=`expr $no - 1` fibo $a1 ... (10 Replies)
Discussion started by: Tapas Bose
10 Replies

6. Shell Programming and Scripting

recursion script problem

Hi Guys,, I tried to create a recursive function in unix. The following is the code. #/bin/sh function(){ n=$1; if ; then out=1; echo "inside if for 0"; else out = `$n * function "$n-1"`; echo "inside if for $n-1; fi (3 Replies)
Discussion started by: mac4rfree
3 Replies

7. Programming

Recursion

I want to halt a tail recursive function after certain validation. I want to come out of entire recursion without unwinding phase. How can i achieve that . The coding is done in C language. (5 Replies)
Discussion started by: joshighanshyam
5 Replies

8. Shell Programming and Scripting

Help Help Help in recursion

Hello every body. I am trying to find the factorial using the following code. But it is giving the syntax error. I tried very much but in vain. Thanks in advance for helping me factorial() { if then y=`expr $1 - 1` x=$(( $1 \* factorial $y ))... (6 Replies)
Discussion started by: murtaza
6 Replies

9. Shell Programming and Scripting

recursion too deep

I am running a korn shell script which has a recursive function. The script ran for 117 iterations and ended up with the following error "recursion too deep". what should be done to avert this? Thanks in advance Swamy p.s. I am on UNIX MPRAS V4 (3 Replies)
Discussion started by: swamy455
3 Replies

10. Shell Programming and Scripting

recursion

I'm using the UNIX csh and i wish to use recursion to nav my way up (or down as it is) a given folder. My little test script is called "r" and takes a folder as argv (or $1) #!/bin/tcsh -f set allFiles = `ls -A $argv` cd $argv while ($#allFiles) if (-d... (1 Reply)
Discussion started by: gsjf
1 Replies
Login or Register to Ask a Question