#!/usr/bin/env python3 """ ============================================================================== Simple custom recursive ls: shows structure and links, with improved support for hidden files, and platform-neutral sort order. '-a' shows any ".*" too (with "_" and space so "." visible), and folder items are always sorted as case-significant+ascending. Run as "ls2.py [-a]" where is the root of the tree to be listed: /somedir$ /Code/ls2.py test1 -a ___ test1 ______ .DS_Store ______ dirlink => dir ______ file ______ filelink => file ______ nestedfilelink => dir/nestedfile ______ test1/dir _________ .other _________ nestedfile The output is substantially more readable than a Unix "ls -aR" equivalent. ============================================================================== """ from __future__ import print_function # use py 3.X or 2.X import os, sys all = '-a' in sys.argv[2:] # past script, folder unixhiddens = ('.', '._') # ignore if not -a ichar = '_' level = 0 for (here, subs, files) in os.walk(sys.argv[1]): indent = len(here.split(os.sep)) print(ichar * (indent*3), here) for s in sorted(subs): if not all and s.startswith(unixhiddens): continue sp = os.path.join(here, s) if os.path.islink(sp): print(ichar * ((indent+1)*3), s, '=>', os.readlink(sp)) for f in sorted(files): if not all and f.startswith(unixhiddens): continue fp = os.path.join(here, f) if os.path.islink(fp): print(ichar * ((indent+1)*3), f, '=>', os.readlink(fp)) else: print(ichar * ((indent+1)*3), f)