理论上很简单:来自所有子目录的文件名和日期的 CSV (Unix(OSX)

Theoretically simple: CSV of filenames and dates from all subdirectories (Unix(OSX)

所以我想做的事情看起来很简单,但是...我就是做不到。

我有一个包含多个子目录的随机文件夹,其中包含很多文件(如 2k)。 现在我想写一个小程序/脚本来生成一个 txt/csv 文件,它只包含: - 文件名 - 最后修改日期 并不是: - 文件的完整路径 - 隐藏文件 - 目录

支持os在OSX下工作。 我目前选择的为其提供简单 GUI 的工具是 python。 基本思想:让终端命令工作并使用 subprocess / os import 从带有 GUI 的已完成程序中使用该命令。

虽然这行得通...我似乎无法使用适当的终端命令。

非常感谢任何帮助,提前致谢!

我在没有调用 os 的情况下尝试了本机 python 解决方案;但显然我的 python 简单技能还不够好。

我尝试使用 ls、find、awk、sed、mtime、stat 构建管道...基本上是将想到的任何东西放在一起,但是...不知何故我把它搞砸了。

我在网上找不到的所有解决方案都针对略有不同的问题,显然我无法将所有部分放在一个大管道中。我添加的一块似乎总是打破另一块。

find PATH -type f -execdir echo {} ';' > output.txt

获取所有不带目录、隐藏文件或完整路径的文件名。这正是我想要的,现在我只需要在输出中包含最后修改日期的第二列...

ls -lRT | awk '{print "\""substr([=12=],index([=12=],))"\""",""\""" "", ""\""",""\"""\""}' > list.csv

Almost 在那里但是...除了 Excel 弄乱了 CSV,我无法摆脱完整路径,但我只需要名称和日期...

find PATH -type f | awk '{print "\""substr([=13=],index([=13=],))"\""",""\""" "", ""\""",""\"""\""}' > folderlist.csv

好吧...这表明负乘以负并不总是等于正。这个也达不到我想要的效果。

import os
import time
import csv


PATH = '.'  # This is your start folder, taking current folder as an example
csv_f = list()
for root, dirs, files in os.walk(PATH):
    for file in files:
        if not file.startswith('.'):
            filepath = os.path.join(root, file)
            if os.path.isfile(filepath):  # This check excludes symlinks
                m_time_raw = os.path.getmtime(filepath)
                m_time = time.ctime(m_time_raw)
                csv_f.append([file, m_time])

with open('temp.csv', 'w', newline='') as c:
    writer = csv.writer(c)
    writer.writerows(csv_f)
c.close()