首先我应该提前道歉 - 当涉及到 Mac 终端时,我不知道我在做什么......
我需要对目录/文件夹中的所有文件进行清单。有几个子目录/文件夹,也有子目录/文件夹,等等。
我希望能够为每个包含以下内容的文件获取一行:
- 路径,例如 DirectoryName1\DirectoryName2\DirectoryName3 等。
- 文件名,包括扩展名(例如 .docx、.xlsx 等)
- 创建日期(日/月/年)
- 最后修改日期(日/月/年)
- 文件大小(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 格式输出,最好是使用perl
或python
。
stat.out
每次重新发出 cmd 时,输出文件都会被重写。每次都更改名称以避免这种情况。