仿写Linux下的ls
时间: 2023-11-30 14:06:18 浏览: 26
为了仿写Linux下的ls,我们需要使用Python来编写一个程序。我们可以使用os模块来访问文件系统,并使用re模块来处理正则表达式。下面是一个简单的实现:
```python
import os
import re
def ls(path='.'):
for name in os.listdir(path):
if name.startswith('.'):
continue
fullname = os.path.join(path, name)
if os.path.isdir(fullname):
print(name + '/')
else:
size = os.path.getsize(fullname)
print('{0:<40s}{1:8d}'.format(name, size))
if __name__ == '__main__':
ls()
```
这个程序会列出当前目录下的所有文件和目录。对于目录,我们在名称后面加上一个斜杠。对于文件,我们显示文件名和大小。为了让输出更加整齐,我们使用了格式化字符串。
这只是一个简单的实现,你可以根据需要进行修改和扩展。
相关问题
仿写Linux下的ls-l命令
以下是仿写Linux下的ls-l命令的Python代码:
```python
import os
import pwd
import grp
import time
def ls_l(path='.'):
# 获取当前目录下的所有文件和目录
files = os.listdir(path)
# 遍历所有文件和目录
for file in files:
file_path = os.path.join(path, file)
stat_info = os.stat(file_path)
# 获取文件权限
mode = stat_info.st_mode
file_perm = ''
if os.path.isfile(file_path):
file_perm += '-'
elif os.path.isdir(file_path):
file_perm += 'd'
else:
file_perm += '?'
if mode & 0o400:
file_perm += 'r'
else:
file_perm += '-'
if mode & 0o200:
file_perm += 'w'
else:
file_perm += '-'
if mode & 0o100:
file_perm += 'x'
else:
file_perm += '-'
if mode & 0o040:
file_perm += 'r'
else:
file_perm += '-'
if mode & 0o020:
file_perm += 'w'
else:
file_perm += '-'
if mode & 0o010:
file_perm += 'x'
else:
file_perm += '-'
if mode & 0o004:
file_perm += 'r'
else:
file_perm += '-'
if mode & 0o002:
file_perm += 'w'
else:
file_perm += '-'
if mode & 0o001:
file_perm += 'x'
else:
file_perm += '-'
# 获取文件所有者和所属组
uid = stat_info.st_uid
gid = stat_info.st_gid
try:
owner = pwd.getpwuid(uid).pw_name
except KeyError:
owner = str(uid)
try:
group = grp.getgrgid(gid).gr_name
except KeyError:
group = str(gid)
# 获取文件大小
size = stat_info.st_size
# 获取文件最后修改时间
mtime = stat_info.st_mtime
mtime_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(mtime))
# 输出文件信息
print('{} {} {} {} {} {}'.format(file_perm, owner, group, size, mtime_str, file))
```
使用示例:
```python
ls_l('.') # 显示当前目录下的文件信息
```
仿写 Linux 下的 ls-l 命令
在 Linux 终端中,`ls -l` 命令可以列出当前目录下的所有文件和子目录,包括它们的详细信息,如权限、所有者、大小、创建时间等等。下面是一个简单的 Python 脚本,可以模仿 `ls -l` 的功能实现:
```python
import os
import pwd
import grp
import datetime
def ls_l(path='.'):
for filename in os.listdir(path):
filepath = os.path.join(path, filename)
stat = os.stat(filepath)
mode = stat.st_mode
nlink = stat.st_nlink
uid = stat.st_uid
gid = stat.st_gid
size = stat.st_size
mtime = datetime.datetime.fromtimestamp(stat.st_mtime).strftime('%Y-%m-%d %H:%M:%S')
uname = pwd.getpwuid(uid).pw_name
gname = grp.getgrgid(gid).gr_name
if os.path.isdir(filepath):
type = 'd'
elif os.path.isfile(filepath):
type = '-'
else:
type = '?'
perms = ''
for who in 'USR', 'GRP', 'OTH':
for what in 'R', 'W', 'X':
if mode & getattr(os, 'S_I' + what + who):
perms += what.lower()
else:
perms += '-'
print(type + perms + ' %2d %-8s %-8s %8d %s %s' % (nlink, uname, gname, size, mtime, filename))
if __name__ == '__main__':
ls_l()
```
这段代码会遍历当前目录下的所有文件和子目录,对于每一个文件或目录,它会获取它的 `stat` 信息,然后解析这些信息,生成类似于 `ls -l` 的输出格式。具体来说,它会输出每个文件或目录的类型、权限、硬链接数、所有者、组、大小、修改时间和名称。其中,文件类型通过判断文件是否为目录或普通文件来确定,权限则通过解析文件的模式位来计算得到。