File: tagpix/examples/ls2.py

#!/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 <folder> [-a]" where <folder>
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)



[Home page] Books Code Blog Python Author Train Find ©M.Lutz