find $DIR -depth -maxdepth 3 \ -type d -readable -printf \ 'echo ; echo %p ; echo ls -t --color=always "%p"\n' |\ . /dev/stdin 2>&- This avoids any argument list problems because the only argument *`ls`* will ever receive is the name of the directory you want listed. You can do this with anything you like. The shell just *`. sources`* the *`|pipe`* as a shell script - it's the same process and doesn't have the issues you can encounter when *`execve`* is called. In any case - the above only goes three-deep which is adjustable by changing *`maxdepth`.* It also deep first - so you work your way backwards to your current directory from *`depth`.* You might notice you also get *`$LSCOLORS`* - on my machine it also provides neatly printed columns and everything else you would want from *`ls`* - or, for that matter, anything you can imagine you'd wanna do with *`. source.`* ###NO SVN Again, this'll do anything you expect of *`ls`.* So hiding *`.svn`* files is as simple as changing the *`ls`* line to: ls -t --color=always --hide="*svn" "%p"\n