解释

解释

我忘记了目录或其子目录之一中的文件名。我记得该文件的扩展名 (.nb) 并大致知道它的创建时间。如何列出当前目录和子目录中具有此扩展名的所有文件及其创建日期?我使用的是 Mac OS X。

答案1

执行此操作的简单方法是桀骜,默认安装在 macOS 上。它是全局限定符让您可以按时间戳和其他元数据选择和排序文件。 zsh不支持创建时间,但支持修改时间和inode更改时间;其中之一可能与创建时间相符。

这列出了当前目录及其子目录 ( ) 中具有扩展名的100 ( [1,100]) 个最新 ( om) 常规 ( .) 文件:.nb**/

zsh -c 'ls -ltr **/*.nb(.om[1,100])'

这列出了 7 到 14 天前修改的文件:

zsh -c 'ls -ltr **/*.nb(.m+6m-14)'

答案2

这应该可以实现你想要的。

find . -type f -name '*.nb'|xargs stat -f '%c %N'|sort

解释

find . -type f -name '*.nb'查找所有扩展名为 .nb 的文件。

xargs stat -f '%c %N'打印出前面带有unix时间戳的文件。

sort把它分类。

答案3

对于 bash(不是 Mac):

find . -type f -iname '*.nb'| xargs -d '\n' stat -c '%z %N'|sort

查找当前目录及以下目录中所有类型为“文件”的条目,匹配模式

(-iname 忽略大小写)

通过管道将其传输到 xargs

(-d '\n' 将分隔符更改为换行符以允许文件名中存在空格)

然后统计

(-c 表示输出格式 %z = 最后状态更改 %N 带引号的文件名)

并对输出进行排序

答案4

find -name '*.nb' -exec ls -rtl {} +

将显示与该模式匹配的所有文件的详细信息,并从最旧到最新对它们进行排序(您可以通过r从命令中删除该选项来从最新到最旧ls)。

最后+意味着您在搜索结束时执行命令,而不是为每个匹配项运行该命令。

笔记:这仅适用于合理数量的匹配,如果命令行太长,ls它将被分成几个ls,导致几个排序的子集,而整个列表将无法正确排序(谢谢@Gilles和@rudimeier 指出了这一点)。

相关内容