Bash:按文件日期对数组元素进行排序

Bash:按文件日期对数组元素进行排序

我有一个 Bash 脚本,其中有一个名为 myarray 的数组。

该数组包含 4 个文件的完整文件位置路径。

我想做的是按文件创建日期对数组元素进行排序。

举个简单的例子,如果数组中有以下 4 个文件:

/tmp/file1.txt (in index 0)
/tmp/test/file1.txt (in index 1)
/tmp/test1/file1.txt (in index 2)
/tmp/test2/file1.txt (in index 3)

...索引 2 中的文件的创建日期比其他文件更新,因此应将其排序到索引 1 中,依此类推。

我最初认为以下内容可以做到这一点:

myarray=($(for each in ${myarray[@]}; do echo $each; done | sort -n))

但如果我查看数组内容,我在索引 0 中看不到最新文件。

有人知道在 bash 中实现这一点的方法吗?

答案1

以下按修改日期对文件进行排序,因为我测试脚本的系统不支持创建日期。如果支持,替换%Y%W应该输出创建时间。

#! /bin/bash
files=(*.txt)
while IFS= read -r line ; do
    sorted+=("$line")
done < <(
    for f in "${files[@]}" ; do
        echo $(stat -c %Y -- "$f")$'\t'"$f"
    done | sort -nk1,1 | cut -t $'\t' -f2-
)

echo "${sorted[@]}"

它适用于名称中带有空格的文件。包含换行符的文件名可能会破坏它,但您不会在文件名中使用换行符,对吧?

相关内容