这是一份我起草的Python脚本...
import sys
from datetime import datetime
b0=True
def is_f(s):
if s == '-':
return 'f'
return s
for line in sys.stdin:
if len(line) < 40:
continue
if b0:
b1=line[0] in ['-', 'd', 'c', 'l']
b0=False
if b1:
cols=7
print "d,perms,#links,owner,group,size,modtime,name,symlink"
else:
cols=9
print "inode,bsize,d,perms,#links,owner,group,size,modtime,name,symlink"
r = line.strip("\n").split(None, cols+1)
if len(r) < cols+1:
continue
if r[cols-7][0] == 'c':
continue
fn = r.pop()
if b1:
c = ''
else:
c = ",".join(r[0:2]) + ","
z = 0
z = r[cols].find(':')
if z < 0:
d = r[cols - 1] + "/" + r[cols - 2] + "/" + r[cols]
else:
n = str(datetime.now() )
d = ''
tm=datetime.strptime(r[cols-2]+ " " + r[cols-1]+ " " + n[:4] +" " + r[cols], "%b %d %Y %H:%M")
if (tm-datetime.now()).days > 0:
d = r[cols - 1] + "/" + r[cols - 2] + "/" + str((datetime.now().year-1)) + " " + r[cols]
tm=datetime.strptime(r[cols-2]+ " " + r[cols-1]+ " " + str(int(n[:4])-1) +" " + r[cols], "%b %d %Y %H:%M")
else:
d = r[cols - 1] + "/" + r[cols - 2] + "/" + " ".join([n[:4], r[cols] ] )
if len(sys.argv) > 1 and sys.argv[1] == '-d':
d=tm.strftime("%Y-%m-%d_%H%M")
y = fn.find(">")
symlink=''
if y > 0:
symlink = ',\"' + fn[y+2:] + '"'
fn = fn[:y-2]
if fn.find( " ") <0:
if fn.find('"') <0:
fn2=fn
else:
fn2="'" + fn + "'"
else:
fn2="'" + fn + "'"
print c+ is_f(r[cols-7][0]) + ",\"" + r[cols-7][1:] + "\"," + ",".join(
r[cols-6:cols-2]) + "," + d + "," + fn2 + symlink
tr
解决方案将会用逗号替换文件名中的空格。awk 解决方案在空格后无法打印文件名的任何部分。如果文件名包含换行符,则输出将为多行。此外,如果任何文件名包含逗号,则您的 CSV 将格式不正确。如果这些问题是相关的,则需要更多的工作。也许只需将输出管道传输到 sed 并删除不需要的逗号即可处理文件名中的空格... - William Pursellls --time-style=long-iso
来避免日期中的空格。 - Hans-Helge