列出目录和所有子目录的内容,包括文件详细信息,即大小、创建日期、修改日期和上次打开日期

列出目录和所有子目录的内容,包括文件详细信息,即大小、创建日期、修改日期和上次打开日期

首先我应该提前道歉 - 当涉及到 Mac 终端时,我不知道我在做什么......

我需要对目录/文件夹中的所有文件进行清单。有几个子目录/文件夹,也有子目录/文件夹,等等。

我希望能够为每个包含以下内容的文件获取一行:

  1. 路径,例如 DirectoryName1\DirectoryName2\DirectoryName3 等。
  2. 文件名,包括扩展名(例如 .docx、.xlsx 等)
  3. 创建日期(日/月/年)
  4. 最后修改日期(日/月/年)
  5. 文件大小(KB)

然后我可以将结果复制并粘贴到电子表格中并从那里获取。

我尝试过 ls 和 find 命令,每个命令都提供了我需要的一部分,但不是两个输出的全部(无需大量手动组合)。我尝试过将 printf 命令与每个命令结合使用,但根据我收到的错误消息,显然缺少一些内容。

有没有办法做到这一点?

TIA,

汤姆

答案1

不确定您的 macOS 或 OSX 上的默认 shell 是什么,但如果该stat实用程序可用(应该)或可以安装,您可以执行以下操作:

$ find . -exec stat -c "%n,%w,%y,%s" {} \;  # on Arch linux
$ find . -exec stat -t "%F %T" -f "%N,%B,%m,%z" {} \;  # on macOS, OSX

CSV 输出示例:

./.bash_history,2020-07-05 19:27:36.691875334 +0200,2020-07-05 19:27:36.691875334 +0200,54669
./.gitignore_global,2018-03-03 14:22:52.298262296 +0100,2018-03-03 14:22:52.298262296 +0100,423
...

如果您对此不熟悉,我建议您输入man find 然后man stat[1] 在您的终端中进行定位。以下是您将看到的简短内容:

  • .指向您当前的工作目录,即发出上述命令时您所在的目录。如果您从与要探索其树的目录不同的目录发出命令,则可以将其更改为任何完全限定的目录路径
  • 对于找到的每个文件,使用以下输出格式执行(-exec标记)cmd :stat

在 Arch Linux 上:

  • %n完全限定文件名(文件路径+文件基名),
  • %w人类可读的文件出生时间,格式YYYY-MM-DD HH:MM:SS +/-hhmm 为系统的数字时区,表示为+hhmm-hhmm。包括秒的小数位,
  • %y文件数据最后修改的人类可读时间,格式与以前相同
  • %s文件总大小(以字节为单位)。

在 macOS 或 OSX 上,stat与以 GNU 为中心的平台上的实现不同。我无法在 macOS 下测试格式以获得此答案,但原则上正确的选项应该是:

  • %N文件名,
  • %B文件出生时间,日期时间格式如上,不带数字时区,
  • %m文件最后一次修改的时间,格式为%B,
  • %z文件总大小。

如果您想保留此输出以供结果后处理,请包含到 cmd 的输出重定向,如下所示:

$ find . -exec stat -t "%F %T" -f "%N,%B,%m,%z" {} \; > stat.out # on macOS or OSX

您可以直接从 .csv 文件打开 CSV 输出文件LibreOffice Calc。但是,如果您希望生成本机 Excel 格式输出,最好是使用perlpython

stat.out每次重新发出 cmd 时,输出文件都会被重写。每次都更改名称以避免这种情况。

相关内容