Skip to content

Instantly share code, notes, and snippets.

@dhylands
Last active August 29, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dhylands/7ff368d177092d1a0ec3 to your computer and use it in GitHub Desktop.
Save dhylands/7ff368d177092d1a0ec3 to your computer and use it in GitHub Desktop.
Micropyton version of ls.py
import os
import stat # Install stat.py from micropython-lib
import sys
import time
SIX_MONTHS = 6 * 30 * 86400
MONTH_NAME = ('', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
def ls(dir):
print('%s:' % dir)
entries = tuple((filename, os.stat(dir + '/' + filename)) for filename in os.listdir(dir))
filtered_entries = []
for entry in entries:
filename = entry[0]
if filename[0] != '.':
filtered_entries.append(entry)
total_size = sum((entry[1][stat.ST_SIZE] + 4095) // 4096 * 4 for entry in filtered_entries)
print('total %d' % total_size)
curr_time = time.time()
sizes = [entry[1][stat.ST_SIZE] for entry in filtered_entries]
if len(sizes) > 0:
max_size = max(sizes)
else:
max_size = 0
size_width = len('%d' % max_size)
sorted_entries = sorted(filtered_entries, key=lambda e: e[0].lower())
for entry in sorted_entries:
filename = entry[0]
filestat = entry[1]
mode = filestat[stat.ST_MODE]
num_links = filestat[stat.ST_NLINK]
uid = filestat[stat.ST_UID]
gid = filestat[stat.ST_GID]
size = filestat[stat.ST_SIZE]
mtime = filestat[stat.ST_MTIME]
mode_str = ''
mode_str += 'd' if stat.S_ISDIR(mode) else '-'
mode_str += 'r' if mode & stat.S_IRUSR else '-'
mode_str += 'w' if mode & stat.S_IWUSR else '-'
mode_str += 'x' if mode & stat.S_IXUSR else '-'
mode_str += 'r' if mode & stat.S_IRGRP else '-'
mode_str += 'w' if mode & stat.S_IWGRP else '-'
mode_str += 'x' if mode & stat.S_IXGRP else '-'
mode_str += 'r' if mode & stat.S_IROTH else '-'
mode_str += 'w' if mode & stat.S_IWOTH else '-'
mode_str += 'x' if mode & stat.S_IXOTH else '-'
ltime = time.localtime(mtime)
time_str = MONTH_NAME[ltime[1]] + ' '
time_str += '%2d ' % ltime[1]
if mtime < curr_time - SIX_MONTHS or mtime > curr_time + SIX_MONTHS:
time_str += ' %04d' % ltime[0]
else:
time_str += '%02d:%02d' % (ltime[3], ltime[4])
print('%s %d %*d %s %s' % (mode_str, num_links, size_width, size, time_str, filename))
for entry in sorted_entries:
filename = entry[0]
filestat = entry[1]
mode = filestat[stat.ST_MODE]
if stat.S_ISDIR(mode):
print()
ls(dir + '/' + filename)
ls('.')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment