Tree Command for Mac
Share
This post is a follow up to Murphy’s post on retrieving a remote file by email. The method described in that post requires you to know the path of the file you’re retrieving. You can use the information in this post to auto-generate a text file with the paths to all your files. Retrieve that file and you’ll have all the information you might need.
For some people the best thing about this post will be this:
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
Enter that line in Terminal, hit return on your keyboard, and you’re pretty close to the tree command you loved so much in Windows. (Thanks to the unix.com forums for help with the find and sed commands. ) You can copy and paste the command, or download a shell script containing it here. You’ll need to make it executable.
Murphy posted last week about how to retrieve a file by email. The catch was that you needed to know the path of the file. This screencast will show you how to generate a text file listing all your files in a tree format. If you prefer, you can use this command:
ls -R
That will also display files and folders, but the format is more conventional. Either command will accomplish our goal.
In the screencast Murphy has the find and sed command listed above inside a shell script. The output is redirected to a text file. You can retrieve that text file by email, just like you would any other file.
If you prefer, create a second Applescript like the one in this post. You could alter it to always send a hard-coded file: the file that lists all your files.
In the screencast, Murphy uses Lingon to configure launchd, which handles scheduling tasks you may have used cron for in the past.
For more information on creating a shell script and making the script executable visit this post. If you want to know more about sed (and awk) there’s a whole book to read.
1. March 2008 at 3:43 pm :
I get a syntax error with the command and shell script.
-bash: syntax error near unexpected token `|’
I’m running 10.5.2
1. March 2008 at 6:08 pm :
tv -
Try now, I think WordPress did something to the text. You should be able to copy and paste it now.
8. April 2008 at 12:06 pm :
How would i get ls -R to output to a text file?
Also is there anyway the script could be altered for files too large for emails and have them uploaded via for instance quickshareit and the download link then sent?
regards
8. April 2008 at 1:30 pm :
dave -
add the following to the end of a command to redirect the output to a text file
>textfile.txt
As for your other questions, yes, something like that could be done. I’m not familiar with quickshareit but there are plenty of alternative methods that could be scripted.
3. July 2008 at 3:13 pm :
Hi again
Ive been using it and it works great but i wanna change a little bit
i know this command creates a textfile with the full path of all the items in the current direcotyr. But how do i change it so it goes into all the subfolders
ls -l | sed ’1d; s/\([^ ]* *\)\{7\}/’”${PWD//\//\\/}”‘\//; s/^\/\//\//; s/ -> .*//’ > text.txt
25. November 2008 at 10:59 am :
Heads up for like minded nerds: bash needs double quotes in order to make this an alias. This works for me on OSX using bash.
alias tree=’find . -print | sed -e “s;[^/]*/;|____;g;s;____|; |;g”‘
3. December 2008 at 3:04 am :
fantastic–just what i was looking for! i never took the time to learn sed or awk…someday, maybe.
thanks for the post!
27. March 2009 at 7:21 pm :
Add this to you ~/.profile
function tree {
find ${1:-.} -print | sed -e ‘s;[^/]*/;|____;g;s;____|; |;g’
}
Then:
$ source ~/.profile
$ tree
$ tree .
$ tree [some-folder-path]
15. April 2009 at 9:51 pm :
hm.. really like it..
21. July 2009 at 5:49 pm :
If you just replace the ‘find . ‘ with ‘find $1 ‘ you can pass the script an argument, eg:
tree ../
24. July 2009 at 2:37 pm :
Can you manipulate the regular expression to skip files and directories that start with “.”, i.e. the hidden ones?
17. November 2009 at 9:51 am :
Hey. Or you can just build the command from source: http://mama.indstate.edu/users/ice/tree/
30. November 2009 at 6:01 pm :
You rock!
13. January 2010 at 4:47 pm :
I agree with Gunnar. The program he linked has a slightly easier to understand output. I wrote a post on how to install it http://bit.ly/6lfSu0
16. November 2010 at 8:57 am :
Great!
Thanks!
7. January 2011 at 11:35 am :
I was using Windows XP from last couple of years but now I got a Mac O S X
so I just want to ask that what is the command for cd\
tree
on mac thanks I’ll wait for your reply.
2. June 2011 at 11:39 am :
Thankyou, I copied and pasted:
“william-molesworths-imac:M william$ find . -print | sed -e ‘s;[^/]*/;|____;g;s;____|; |;g’ > filename.txt”
It worked very nicely!
2. June 2011 at 6:33 pm :
Why don´t install macport?
9. July 2011 at 1:16 pm :
sudo port install tree
14. July 2011 at 6:15 pm :
sudo brew install tree
4. August 2011 at 4:45 pm :
ty
8. January 2012 at 9:01 am :
Better yet, get the debian tree package but running:
fink install tree
(Of course, you need to have fink installed first. I love fink. I have access to debian stuff.)
20. February 2012 at 7:00 am :
Thank you, Ezra!
function tree {
find ${1:-.} -print | sed -e ‘s;[^/]*/;|____;g;s;____|; |;g’
}
Your tree cmd written in sed worked very nicely, and with a path argument, on Mac OS X 10.6 and on my VPS shared host, running centos 4.
Wonderfully helpful.
29. February 2012 at 8:58 pm :
Hi Murphy,
Is it somehow possible to output the dates of the files as well?