给定一个包含以下内容的目录:
note 1.txt
, 昨天最后修改note 2.txt
,上次修改前天note 3.txt
,今天最后修改获取数组的最佳方法是什么note 3
note 1
note 2
?
为了定义“最佳”,我更关心稳健性(在 macOS 中的 ZSH 上下文中),而不是效率和可移植性。
预期的用例是一个包含数百或数千个纯文本文件的目录,但是——冒着混淆问题的风险——这是我有一个更普遍的问题的一个特定案例,在文件路径上执行字符串操作的最佳实践是什么由命令打印喜欢ls
,find
,和mdfind
。
我一直在使用一个调用此命令的宏来实现上述目的:
ls -t | sed -e 's/.[^.]*$//'
Run Code Online (Sandbox Code Playgroud)
它从来没有失败过,但是:
ls
. (解析ls
;实践,在“5. 永远不要做这些”下)。sed
在参数扩展会做的地方调用效率低下吗?使用find
(用 NUL 字符而不是换行符安全地分隔文件路径)和参数扩展来提取基本名称,这会产生一个未排序的列表:
find . -type f -print0 | while IFS= read -d '' -r l ; do print "${${l%.*}##*/}" ; done
Run Code Online (Sandbox Code Playgroud)
但是按修改日期排序似乎需要调用stat …