|
import os import argparse
import datetime
from pathlib import Path
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument("dir", type=str, nargs='?', default=Path.cwd())
parser.add_argument("-a","--all", action ='store_true')
parser.add_argument("-l", action ='store_true')
parser.add_argument("-h", "--human", action ='store_true')
args = parser.parse_args()
if args.dir:
dr = Path(args.dir)
MODE_DICT = {'0':'---', '1':'--x', '2':'-w-', '3':'-wx', '4':'r--', '5':'r-x', '6':'rw-', '7':'rwx'}
FILE_DICT = {'1':'-','4':'d', '2':'c', '6':'b', '3':'l', '5':'s','7':'p'}
#无参数或只有-h
if (not args.l and not args.human) or not args.l:
for i in sorted(os.listdir(dr)):
print(i, end=' ')
print()
#有-l参数
if args.l:
for i in sorted(os.listdir(dr)):
file_path = dr / i
#如果没有-a,不显示隐藏文件
if not args.all and i.startswith('.'):
continue
stat = os.lstat(file_path)
st_mode = str(oct(stat.st_mode))
mtime = datetime.datetime.fromtimestamp(stat.st_mtime).strftime('%Y-%m-%d %H:%M:%S')
#计算文件类型
new_file_kind = FILE_DICT[st_mode[2]]
#计算权限
mode=st_mode[-3:]
new_mode = ''
for m in mode:
new_mode += MODE_DICT.get(m)
#人性化显示文件大小
if args.human:
size = stat.st_size
interval = 1024
for j in ['k', 'M', 'G', 'T']:
temp_size = stat.st_size // interval
if temp_size > 0:
size = str(round(stat.st_size / interval, 1)) + j
else:
break
interval = interval ** 2
print('{}{} {:>2} {} {} {} {} {}'.format(new_file_kind, new_mode, stat.st_nlink, stat.st_uid, stat.st_gid,> print() |
|
|