The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Top Forums > UNIX for Dummies Questions & Answers
.
google unix.com



UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !!

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
problem in awk int() function qa.bingo Shell Programming and Scripting 2 01-02-2009 09:52 AM
Recursion joshighanshyam High Level Programming 5 12-03-2008 12:15 PM
Help Help Help in recursion murtaza Shell Programming and Scripting 6 03-29-2007 10:26 AM
Problem with recursion in subdirectories scotty_123 Shell Programming and Scripting 5 03-11-2007 05:51 AM
recursion gsjf Shell Programming and Scripting 1 08-26-2002 12:22 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 03-12-2009
nuvpal nuvpal is offline
Registered User
  
 

Join Date: Mar 2009
Posts: 7
Function Recursion Shift Problem

Hi, I'm trying to create a script that will display the contents of the users directories, but i'm confused about how to incorporate the shift properly.

The problem I'm getting with my script is that it goes throught the first couple of directories but then returns an error as it loses the first directory when continuing the search to other directories (I hope that makes sense?!)
EDIT: I apologise, that was the old problem, now the problem is the path to be searched adds the wrong directories so it looks in paths that do not exist

Here's my code, any help would be greatly appreciated.

Code:
direc=~
list=$(ls -l $direc | egrep '^d' | cut -d" " -f8)
function printList() {
        for line in $*
        do
                echo $line
                list=$(ls -l $direc/$1 | egrep '^d' | cut -d" " -f8)
                direc=$direc/$1
                shift
                printList $list
 
        done
}
printList $list
EDIT2: I have also tried suppressing the error returned by the ls to dev null by editing the line inside the function:
Code:
                list=$(ls -l $direc/$1 | egrep '^d' | cut -d" " -f8 2>/dev/null)
and also
Code:
                list=$(ls -l $direc/$1 | egrep '^d' | cut -d" " -f8) 2>/dev/null
but niether work, both return the same output, in other words they are still not suppressesing the standard error.

Last edited by nuvpal; 03-12-2009 at 06:22 AM..
  #2 (permalink)  
Old 03-12-2009
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
addict
  
 

Join Date: Jan 2007
Location: Варна, България / Milano, Italia
Posts: 2,854
What's wrong with:

Code:
ls ~username
... or I'm missing something?

Could you post an example of the desired output?
  #3 (permalink)  
Old 03-12-2009
nuvpal nuvpal is offline
Registered User
  
 

Join Date: Mar 2009
Posts: 7
Quote:
Originally Posted by radoulov View Post
What's wrong with:

Code:
ls ~username
... or I'm missing something?

Could you post an example of the desired output?
I'm not quite sure what ls ~username would do, when I try it, it outputs the same as a normal ls command...

Basically what I want my script to do is display a visual representation of the specified directory and all its sub directories (like the tree command).

I have managed to supress the original ls error by adding the 2>/dev/null to the function call itself which seems to work ok now:
Code:
#!/bin/bash
direc=~
seperator=....
list=$(ls -l $direc | egrep '^d' | cut -d" " -f8)
function printList() {
        for line in $*
        do
                echo $line
                list=$(ls -l $direc/$1 | egrep '^d' | cut -d" " -f8 )
                direc=$direc/$1
                shift
                printList $list 2>/dev/null

        done
}
printList $list 2>/dev/null
But my script still does not work correctly, it will scan through the first directory found and display it along with all the subdirectories, but when it comes to loop back to the original directory and display the next directory it won't scan through and display the subdirectories of it. (I'm finding it quite hard to explain but I hope you can understand)

the output given will be something like: (where the . and number represent the directories and subdirectories)
direc1
direc1.1
direc1.1.1
direc1.1.2
direc1.2
direc1.2.1
direc2

and then it halts, where as i want it to display an output like:
direc1
direc1.1
direc1.1.1
direc1.1.2
direc1.2
direc1.2.1
direc2
direc2.1
direc2.1.1
direc2.2
direc2.2.1
direc3
direc3.1
direc3.1.1
direc3.2
direc4
...etc

Last edited by nuvpal; 03-12-2009 at 08:26 AM..
  #4 (permalink)  
Old 03-12-2009
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
addict
  
 

Join Date: Jan 2007
Location: Варна, България / Milano, Italia
Posts: 2,854
I still cannot understand: given your example direc1.1, 1 is the name of the subdirectory or some sort of auto incremented id?
Do you want to produce an output similar to this one:

Code:
$ find -type d
.
./dir1
./dir1/dir11
./dir1/dir11/dir111
./dir1/dir12
./dir1/dir12/dir121
./dir2
  #5 (permalink)  
Old 03-12-2009
nuvpal nuvpal is offline
Registered User
  
 

Join Date: Mar 2009
Posts: 7
Quote:
Originally Posted by radoulov View Post
I still cannot understand: given your example direc1.1, 1 is the name of the subdirectory or some sort of auto incremented id?
Do you want to produce an output similar to this one:

Code:
$ find -type d
.
./dir1
./dir1/dir11
./dir1/dir11/dir111
./dir1/dir12
./dir1/dir12/dir121
./dir2
Kind of... Simply put, what I would like to do is create a script which displays an output similar to the unix tree command
Code:
tree ~
but only list directories and subdirectories, no files.

I hope that is clearer. And I greatly appreciate your help and time.
  #6 (permalink)  
Old 03-12-2009
radoulov's Avatar
radoulov radoulov is offline Forum Staff  
addict
  
 

Join Date: Jan 2007
Location: Варна, България / Milano, Italia
Posts: 2,854
Did you try:

Code:
tree -d ~
or (as already stated):

Code:
find -type d
  #7 (permalink)  
Old 03-12-2009
nuvpal nuvpal is offline
Registered User
  
 

Join Date: Mar 2009
Posts: 7
Quote:
Originally Posted by radoulov View Post
Code:
$ find -type d
.
./dir1
./dir1/dir11
./dir1/dir11/dir111
./dir1/dir12
./dir1/dir12/dir121
./dir2
to better explain my direc1, direc1.1 blah blah...
direc1 would be the parent directory, direc1.1 and direc 1.2 would be sub directories of direc1, and direc1.1.1 would be a sub directory of the subdirectory direc1.1

i hope thats a bit clearer
Closed Thread

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 04:39 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0