如何在bash脚本中获得按修改日期排序的当前目录的文件列表



我想获得当前目录中所有文件的列表(或数组(,该列表按修改日期排序。在终端中,类似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/)但我希望有一个更简单、更优雅的解决方案。

这可能会对您有所帮助:

在带有GNU扩展的bash中:

创建阵列

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

或在文件上循环:

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

在这里,我们构建了一个以NULL字符作为分隔符的文件列表。字段本身由epoch中的修改日期、后面的空格和文件名组成。我们使用sort按修改日期对该列表进行排序。它的输出被传递到while循环,该循环reads每个零终止记录的字段。第一个字段是我们在_中读取的修改日期,其余字段传递给file

在ZSH中:

如果你想使用另一个像zsh这样的shell,你可以做一些类似的事情:

a=( *(Om) )

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

这里Om是一个glob-modifier,它告诉ZSH按修改日期对输出进行排序。

相关内容

  • 没有找到相关文章

最新更新