如何在bash脚本中获取当前目录按修改日期排序的文件列表? [重复]

问题描述 投票:0回答:1

我想获取当前目录中所有文件的列表(或数组),并按修改日期排序。在终端中,类似

ls -lt
的东西可以工作,但不应该在 bash 脚本中使用(http://mywiki.wooledge.org/BashPitfalls#for_i_in_.24.28ls_.2A.mp3.29)...

我尝试使用

-nt
选择器(https://tips.tutorialhorizon.com/2017/11/18/nt-file-test-operator-in-bash/),但我希望有一个更简单和优雅的解决方案。

arrays bash list shell sorting
1个回答
1
投票

这可能对您有帮助:

在带有 GNU 扩展的 bash 中:

创建数组

mapfile -d '' a < <(find -maxdepth 1 -type f -printf "%T@ %p\0" | sort -z -k1,1g | cut -z -d ' ' -f2)

或循环文件:

while read -r -d '' _ file; do
   echo "${file}"
done < <(find -maxdepth 1 -type f -printf "%T@ %p\0" | sort -z -k1,1g)

这里我们建立一个以 NULL 字符作为分隔符的文件列表。该字段本身由纪元中的修改日期组成,后跟空格和文件名。我们使用

sort
按修改日期对该列表进行排序。其输出被传递到一个 while 循环,该循环对每个零终止记录的字段进行
reads
处理。第一个字段是我们在
_
中读取的修改日期,其余部分传递给
file

在ZSH中:

如果你想使用其他 shell,比如 zsh,你可以这样做:

a=( *(Om) )

for file in *(Om); do echo "${file}"; done

这里

Om
是一个 glob 修饰符,告诉 ZSH 按修改日期对输出进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.