find $DIR -depth -maxdepth 3 \ -type d -readable -printf \ "echo ; echo %p ; echo ls -t --color=always %p\n" |\ . /dev/stdin 2>&- | $PAGER 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.`*