您好,登錄后才能下訂單哦!
在Linux下命令ls和dir都有相同的功能:打印當前文件夾目錄。
注:ls 是Linux的原裝命令,dir 是原來dos的命令,Linux選擇兼容了此個dos命令,所以dir和ls在功能上是一樣的。
1. ls命令
常見的ls命令有:
ls # 顯示不隱藏的文件與文件夾
ls -l # 顯示不隱藏的文件與文件夾的詳細信息
ls -a # 顯示當前目錄下的所有文件(包含.開頭的隱藏文件)
注意:total為當前目錄下所有文件占用的內存塊(block)的大小,即下圖第一列數值之和。
2. Python實現dir -l 命令
對于利用os模塊編寫一個能實現dir -l輸出的程序,首先得了解一下各個字段的含義,請參考:
https://baike.baidu.com/item/ls%20-l/5261110?fr=aladdin
顯然難點在于怎樣獲取文件權限、文件大小、文件創建時間。
import os
import time
import stat
import math
from pwd import getpwuid
from grp import getgrgid
FILE_PERMS = [
{'r': stat.S_IRUSR, 'w': stat.S_IWUSR, 'x': stat.S_IXUSR},
{'r': stat.S_IRGRP, 'w': stat.S_IWGRP, 'x': stat.S_IXGRP},
{'r': stat.S_IROTH, 'w': stat.S_IWOTH, 'x': stat.S_IXOTH}
]
class Info:
def __init__(self, name, size_width=0):
self.width = size_width
statinfo = os.stat(name)
mode = statinfo.st_mode
self.name = name
fmt = "%b %d %H:%M"
self.date = time.strftime(fmt, time.localtime(statinfo.st_mtime))
self.size = statinfo.st_size
allocated_size = statinfo.st_blocks * statinfo.st_blksize
f_bsize = os.statvfs(name).f_bsize
f_block_num = math.ceil(allocated_size / f_bsize)
self.fsize = f_block_num * f_bsize // 1024
self.user = getpwuid(statinfo.st_uid).pw_name
self.group = getgrgid(statinfo.st_gid).gr_name
self.nlink = statinfo.st_nlink
self.perm = 'd' if stat.S_ISDIR(mode) else '-'
for perm in FILE_PERMS:
self.perm += 'r' if mode & perm['r'] else '-'
self.perm += 'w' if mode & perm['w'] else '-'
self.perm += 'x' if mode & perm['x'] else '-'
# magic method: Overrides method in object
def __str__(self):無錫人流醫院 http://www.0510bhyy.com/
return "{} {} {} {} {:{width}} {} {}".format(
self.perm, self.nlink, self.user, self.group,
self.size, self.date, self.name, width=self.width)
if __name__ == '__main__':
total = 0
dir_list = []
width = 0
for x in os.listdir('.'):
if x[0] == '.':
continue
item = Info(x)
width = max(width, len(str(item.size)))
total += item.fsize
dir_list.append(x)
print('total', total)
for x in sorted(dir_list, key=lambda z: z.upper()):
print(Info(x, width))
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。