Last active
August 29, 2015 14:24
-
-
Save dhylands/7ff368d177092d1a0ec3 to your computer and use it in GitHub Desktop.
Micropyton version of ls.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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