![如何以逆时间顺序列出目录下的所有叶子文件?](https://linux22.com/image/64949/%E5%A6%82%E4%BD%95%E4%BB%A5%E9%80%86%E6%97%B6%E9%97%B4%E9%A1%BA%E5%BA%8F%E5%88%97%E5%87%BA%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E6%89%80%E6%9C%89%E5%8F%B6%E5%AD%90%E6%96%87%E4%BB%B6%EF%BC%9F.png)
给定一个目录,我们如何以时间倒序列出其所有叶文件?ls -Rltr
是按时间倒序排列子目录的内容,但按子目录对文件进行分组,这打破了按时间倒序列出所有叶文件(无论其父目录)的要求。谢谢。
答案1
和zsh
:
printf '%s\n' **/*(D^om/:t)
zsh
这些是全局限定符,这是目前独有的功能。
D
: 包含点文件^
: 反转以下限定符om
:修改时间顺序(与 相反^
)/
:排除(使用^
)类型的文件目录。:t
: 一个修饰符,可以得到尾巴文件的名称(基本名称)。
(如果您想要完整路径而不仅仅是基本名称,只需删除:t
)。
与bash
或任何外壳,提供zsh
可用:
zsh -c 'printf "%s\n" **/*(D^om/:t)'
或者在 GNU 系统上:
find . ! -type d -printf '%T@\t%f\0' | sort -zn |
tr '\n\0' '\0\n' | cut -f2- | tr '\0' '\n'
(如果您想要完整路径而不仅仅是基本名称,只需替换%f
为%P
或%p
(与此处相同./%P
))。